Overview#Attackers both "white-Hat and others will find the Vulnerability of all systems.
Without a doubt, the biggest weaknesses in OAuth 2.0 reside within the implementation details.
Beyond that, a few OAuth 2.0 Vulnerabilities have been discovered and are worth mentioning.
General Guidelines#You should be using the Authorization Code Grant if it is a server based client.
There are some issues Browser JS, For the moment the only standard for the in browser client is fragment encoding. In the future we hope to have more modern methods based on post message.
For people using openID Connect who want a Identity Token in the Hybrid Flow they should use the form post response mode. Browsers now re-append fragments across HTTP 302 URL redirection unless they are explicitly cleared this makes fragment encoding less safe than it was when originally specified.
The OAuth 2.0 protocol is one of the most widely deployed authorization/single sign-on (SSO) protocols and also serves as the foundation for the new SSO standard OpenID Connect. Despite the popularity of OAuth, so far analysis efforts were mostly targeted at finding bugs in specific implementations and were based on formal models which abstract from many web features or did not provide a formal treatment at all. In this paper, we carry out the first extensive formal analysis of the OAuth 2.0 standard in an expressive web model. Our analysis aims at establishing strong authorization, authentication, and session integrity guarantees, for which we provide formal definitions. In our formal analysis, all four OAuth grant types (authorization code grant, implicit grant, resource Owner Password Credentials Grant, and the client Credentials Grant) are covered. They may even run simultaneously in the same and different relying parties and identity providers, where malicious relying parties, identity providers, and browsers are considered as well. Our modeling and analysis of the OAuth 2.0 standard assumes that security recommendations and best practices are followed, in order to avoid obvious and known attacks.
When proving the security of OAuth in our model, we discovered four attacks which break the security of OAuth. The vulnerabilities can be exploited in practice and are present also in OpenID Connect. We propose fixes for the identified vulnerabilities, and then, for the first time, actually prove the security of OAuth in an expressive web model. In particular, we show that the fixed version of OAuth (with security recommendations and best Practices in place) provides the authorization, authentication, and session integrity properties we specify.OAuth 2.0.  discusses several items relating to the protocol not insisting on the use of TLS/HTTPS. Of course everyone should use TLS/HTTPS.  does provide several good suggestions.
Attack: HTTP 307 URL redirection#In this attack, the Attacker (running a malicious Relying Party) learns the user’s credentials when the user logs in at an Identity Provider (IDP) that uses the wrong HTTP redirection status code.
Fix#The fix it to be certain that OAuth 2.0 implementations require HTTP 303 redirects for the steps mentioned above in order to fix this problem.
Attack: Identity Provider (IDP) Mix-Up#The attacker confuses an Relying Party about which Identity Provider (IDP) the user chose at the beginning of the login/authorization process in order to acquire an authentication code or access token which can be used to impersonate the user or access user data.
To launch the attack, the attacker manipulates the first request of the user such that the Relying Party thinks that the user wants to use an identity managed by an Identity Provider (IDP) of the attacker while the user instead wishes to use her identity managed by an honest Identity Provider (IDP). As a result, the Relying Party sends the authorization code or the access token (depending on the OAuth mode) issued by the honest Identity Provider (IDP) to the attacker, who then can use these values to login at the Relying Party under the user’s identity (managed by the honest Identity Provider (IDP)) or access the user’s protected resources at the honest Identity Provider (IDP).
Fix#A fundamental problem in the Implicit Grant of the OAuth 2.0 standard (and similarly for the Authorization Code Grant) is that the redirect in Steps 6 and 7 in Figure 2 does not contain information from where the redirect was initiated. And hence, the RP cannot check whether the information contained in the redirect stems from the IdP that was indicated in Step 1. (This attack is fairly sophisticated and details will not be detailed here. See the reference )
Our fix therefore is to include the identity of the Identity Provider (IDP) in the redirect in some form. More specifically, we propose that Relying Partys provide a unique redirection endpoint for each Identity Provider (IDP). Hence, the information which Identity Provider (IDP) redirects the browser to the Relying Party is encoded in the request and the Relying Party can detect a mismatch.
We show in Section 5 that this fix is indeed sufficient. In addition, one could try to prevent the Identity Provider (IDP) mix-up directly at the beginning of the protocol. (Nonetheless, in any case the Relying Party should be able to check consistency in Step 7) We have not considered such additional countermeasures because, as we show, our fix is sufficient for the security of OAuth 2.0 (as far as authorization and authentication goes).
Implications to OpenID Connect #Both, the 307 redirect attack and the Identity Provider (IDP) mix-up attack, can be applied to OpenID Connect as well.
OpenID Connect  is a standard for authentication built on top of the OAuth 2.0 protocol. OpenID Connect uses the same concept for authentication as described above and supports retrieval of a unique user identifier and further meta data.
More Information#There might be more information for this subject on one of the following:
- [#1] - A Comprehensive Formal Security Analysis of OAuth 2.0 - based on information obtained 2016-04-08
- [#3] - A Comprehensive Formal Security Analysis of OAuth 2.0 - based on information obtained 2016-06-27