OAuth2:客户端证书授权(Client Credentials)类型的开放授权

    xiaoxiao2021-04-13  37

    适应范围

    认证服务器不提供像用户数据这样的重要资源,仅仅是有限的只读资源或者一些开放的API。例如使用了第三方的静态文件服务,如Google Storage或Amazon S3。这样,你的应用需要通过外部API调用并以应用本身而不是单个用户的身份来读取或修改这些资源。这样的场景就很适合使用客户端证书授权。

    流程剖析

    1. 用客户端证书交换访问令牌

    应用程序需要向认证服务器申请访问令牌,而该请求则需要客户端证书进行认证。

    假设现在我们正在折腾facebook,其认证URL为:

    https://graph.facebook.com/oauth/access_token

    这里需要使用POST请求并附带以下参数:

    grant_type

    这里为“client_credentials”

    client_id

    应用注册时获得的client id

    client_secret

    应用注册时获得的client secret

    以下是一个通过命令行HTTP客户端curl发起的请求示例:

    1 2 3 4 curl -d "grant_type=client_credentials\ &client_id=2016271111111117128396\ &client_secret=904b98aaaaaaac1c92381d2" \ https: //graph .facebook.com /oauth/access_token

    如果认证成功,服务器将会返回access_token:

    1 2 3 {      "access_token":"2016271111111117128396|8VG0riNauEzttXkUXBtUbw" }

    2. 访问API

    到这里就毫无疑问了,你只需通过HTTP Authorization头或查询参数提供获取到的access_token即可正常访问API,具体要以何种形式传递access_token则取决于API提供商的支持。

    以下是用curl发起的API请求并以查询参数的形式传递access_token:

    1 2 curl "https: //graph .facebook.com /202627763128396/insights ?\ access_token=2016271111111117128396|8VG0riNauEzttXkUXBtUbw"
    转载请注明原文地址: https://ju.6miu.com/read-668779.html

    最新回复(0)