OAuth 2.0定义了四种授权方式。
1.授权码模式(authorization code)
2.简化模式(implicit)
3.密码模式(resource owner password credentials)
4.客户端模式(client credentials)
ClientCredentials客户端模式:
Client使用自己的 client证书(如 client_id及client_secret组成的 http basic验证码)来获取 access token,只能用于信任的client
场景:
认证服务器不提供像用户数据这样的重要资源,仅仅是有限的只读资源或者一些开放的API。例如使用了第三方的静态文件服务,如Google Storage或Amazon S3。这样,你的应用需要通过外部API调用并以应用本身而不是单个用户的身份来读取或修改这些资源。这样的场景就很适合使用客户端证书授权。
1. 用客户端证书交换访问令牌
应用程序需要向认证服务器申请访问令牌,而该请求则需要客户端证书进行认证。
假设现在我们正在折腾环信IM,其认证URL为:
https://a1.easemob.com/pair/pair/token
这里需要使用POST请求并附带以下参数:
grant_type
这里为“client_credentials”
client_id
应用注册时获得的client id
client_secret
应用注册时获得的client secret
以下是一个通过命令行HTTP客户端curl发起的请求示例:
curl -d "grant_type=client_credentials\
&client_id=2016273333331117128396\
&client_secret=904b98aaaaaaac1c92381d2" \
https://a1.easemob.com/pair/pair/token