OAuth2是一种授权框架,用于授权第三方应用程序
访问受保护资源,而无需将用户凭据暴露给第三方。它允许用户提供对其受保护资源的有限访问权限,而不会泄露其凭据。
一、角色
OAuth2定义了四种角色:资源所有者(即最终用户)
、客户端(第三方应用程序)
、授权服务器(验证资源所有者身份并颁发访问令牌)
和资源服务器(托管受保护资源)
。
二、使用场景
OAuth2的使用场景包括用户授权
、第三方应用程序访问受保护API
、单点登录
等。OAuth2是一种灵活的授权机制,被广泛用于互联网服务和应用程序中。
三、授权模式
OAuth2定义了四种授权模式,包括授权码模式、隐藏模式、密码模式和凭证式模式。
1. 授权码模式(Authorization Code Grant):
- 用户将被重定向到授权服务器,授权服务器将发回授权码给客户端,然后客户端使用授权码获取访问令牌,在Web应用程序中集成第三方登录,建议使用。
GET /authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=SCOPE
POST /token?grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI&client_id=CLIENT_ID&client_secret=CLIENT_SECRET
2. 隐藏模式(Implicit Grant):
- 客户端直接从授权服务器获取访问令牌,跳过授权码这一步,单页应用(SPA)或移动应用建议使用,这种模式适合前端应用,不需要客户端存储敏感信息。
GET /authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=SCOPE
3. 密码模式(Resource Owner Password Credentials Grant):
- 用户将其用户名和密码直接提供给客户端,客户端使用这些凭据获取访问令牌,如果需要用户使用其用户名和密码直接登录,可以选择密码模式。
POST /token?grant_type=password&username=USERNAME&password=PASSWORD&client_id=CLIENT_ID&client_secret=CLIENT_SECRET
4. 凭证式模式(Client Credentials Grant):
- 客户端使用自己的凭证直接从授权服务器获取访问令牌,适用于客户端自身需要访问资源的情况,如果是机器对机器的通信,可以使用凭证式模式,这种模式适合后端服务之间的通信,不涉及用户交互。
POST /token?grant_type=client_credentials&client_id=CLIENT_ID&client_secret=CLIENT_SECRET