Google Oauth2,我应该使用Google提供的令牌还是生成自己的令牌

问题描述 投票:0回答:1

所以我正在使用 Spring Java 实现 Login with Google 功能。我按照 Spring 文档设置进行操作,效果很好。我的资源服务器设置如下所示。

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: https://accounts.google.com
          jwk-set-uri: https://www.googleapis.com/oauth2/v3/certs

但是Google提供的令牌不包含我执行授权所需的信息,例如

USER_ROLES
USER_AUTHORITY
等。所以我正在考虑这样做

  1. 使用Google OAuth2流程登录,如果通过身份验证,则进入下一步,
  2. 使用 Google 的令牌从
    https://www.googleapis.com/oauth2/v1/userinfo?alt=json
    获取用户信息。
  3. 在数据库中创建一条用户记录,如果之前不存在,则会包含用户信息,包括
    ROLES
  4. 生成一组新的令牌,其中声明我需要授权部分并刷新令牌机制。
  5. 配置资源服务器以使用我的授权服务器中的
    jwk-set-uri

我还计划使用与上述相同的方法支持 Facebook 登录和 Github 登录,所以这样做是否安全或有任何更好的方法推荐。

java spring spring-boot oauth-2.0 google-oauth
1个回答
0
投票

答案就在访问令牌中的受众声明 (

aud
) 中(或在自省时与其关联)。如果您的资源服务器不属于该受众,则它不应该接受它。

如果您想将自己的声明与身份相关联并控制令牌格式、受众等,那么您的意图是正确的:使用自己的授权服务器并将其他服务器配置为身份源。这个新的授权服务器将成为您的客户端和资源服务器的唯一参考。

Keycloak 是一个非常流行的解决方案。但是,如果您仅使用“外部”身份源(没有或不想共享外部帐户的用户不需要注册和登录),您也可以考虑 Spring 授权服务器。

© www.soinside.com 2019 - 2024. All rights reserved.