allauth/dj_rest_auth -为什么Google OAuth2在后端服务器不知道client_id,client_secret的情况下工作

niwlg2el  于 2023-03-22  发布在  Go
关注(0)|答案(1)|浏览(159)

我在这个项目中尝试实现了Google OAuth2认证,后端服务器运行DjangoDRF,使用rest API登录,使用dj_rest_auth库。
它的工作原理大致如下:

  1. front-end generates auth url like https://accounts.google.com/o/oauth2/auth/i...
    1.用户验证
    1.前端接收access_token
  2. access_token正在发送到{{API_URL}}auth/google/的API
    1.后端使用此令牌获取配置文件信息并保存用户
    我需要注册SocialApp与谷歌提供商,但它看起来像是只用于配置文件获取.事实上,我只是使用client_id="xxx"和没有client_secret.
    我希望access_token可以使用client_idclient_secret进行验证,但显然它可以在没有它们的情况下工作。
    安全吗?
yqkkidmi

yqkkidmi1#

一旦你有了一个access token,你就不需要再传递你的client_idclient_secret了。无论是JWT还是reference类型的令牌,identity server都会通过解析JWT或匹配与注册客户端Map的reference token来验证你的客户端。
当您在HTTP头中请求identity provider访问令牌时,需要传入这些值,如下所示。

Authorization: Basic Base64Encode(clientId:clientSecret)

请查看RFC 6749中的客户端密码部分和RFC 2617中的基本身份验证方案,了解有关构建Basic值的更多详细信息。
我希望access_token以某种方式使用client_id和client_secret进行验证,但显然它没有它们也能工作。这安全吗?
是的,因为identity provider可以完全信任the access token所代表的客户端。

相关问题