【问题标题】:Question about OAuth 2.0 authorization flow关于 OAuth 2.0 授权流程的问题
【发布时间】:2020-05-17 08:29:38
【问题描述】:

我一直在查看来自Microsoft OAuth2 flow 的这张图片,我有一个问题

会弹出一个浏览器对话框,他们在其中输入凭据并同意权限;作为回报,我得到一个authorizationCode。有了这个authorizationCode,我应该向/oauth2/token 提出请求,并换取access_tokenrefresh_token

为了获得access_tokenrefresh_token,我必须将authorizationCodeclientSecret 结合起来。

我的问题是:谁应该请求access_token前端还是后端

我得到了authorizationCode 并将其发送到拥有clientSecret 的后端,并做了一些魔术并将access_token 返回给我,我可以进一步使用它来验证WebAPI? 或者一切都应该在前端完成并直接将access_token发送到API?

谢谢!

【问题讨论】:

  • Shury,你觉得我的回答有用还是有什么问题?

标签: oauth-2.0 authorization


【解决方案1】:

我认为最好使用Proof Key for Code Exchange (PKCE) 而不是密码。 Microsoft supports it,请参阅 auth 请求参数 code_challengecode_challenge_method。然后是 token 端点的 code_verifier 参数,您可以使用它来代替密码。还有OAuth 2.0 for Native Apps RFC 说:

公共原生应用客户端必须实现代码证明密钥 Exchange (PKCE [RFC7636]) 对 OAuth 的扩展和授权 服务器必须支持此类客户端的 PKCE

示例:在发出身份验证请求之前,您生成一个随机文本(后来用作code_verifier),然后创建其 SHA-256 哈希(用作code_challenge)并让身份验证服务器知道您使用 SHA-256 和 &code_challenge_method=S256。身份验证服务器保留这些值,当您向 token 端点询问令牌时,它将根据 code_verifier 值创建自己的 SHA-256 哈希。如果哈希值等于您之前发送的code_challenge,则服务器将接受该请求。

【讨论】:

    猜你喜欢
    • 2015-12-11
    • 2016-10-15
    • 2018-08-05
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2016-08-01
    • 2020-12-11
    • 2012-06-19
    相关资源
    最近更新 更多