关于 OAuth 2.0 授权流程的问题
Posted
技术标签:
【中文标题】关于 OAuth 2.0 授权流程的问题【英文标题】:Question about OAuth 2.0 authorization flow 【发布时间】:2020-05-17 08:29:38 【问题描述】:我一直在查看来自Microsoft OAuth2 flow 的这张图片,我有一个问题
会弹出一个浏览器对话框,他们在其中输入凭据并同意权限;作为回报,我得到一个authorizationCode
。有了这个authorizationCode
,我应该向/oauth2/token
提出请求,并换取access_token
和refresh_token
。
为了获得access_token
和refresh_token
,我必须将authorizationCode
与clientSecret
结合起来。
我的问题是:谁应该请求access_token
? 前端还是后端?
我得到了authorizationCode
并将其发送到拥有clientSecret
的后端,并做了一些魔术并将access_token
返回给我,我可以进一步使用它来验证WebAPI?
或者一切都应该在前端完成并直接将access_token
发送到API?
谢谢!
【问题讨论】:
Shury,你觉得我的回答有用还是有什么问题? 【参考方案1】:我认为最好使用Proof Key for Code Exchange (PKCE) 而不是密码。 Microsoft supports it,请参阅 auth
请求参数 code_challenge
和 code_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
,则服务器将接受该请求。
【讨论】:
以上是关于关于 OAuth 2.0 授权流程的问题的主要内容,如果未能解决你的问题,请参考以下文章