所以我正在使用 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
等。所以我正在考虑这样做
https://www.googleapis.com/oauth2/v1/userinfo?alt=json
获取用户信息。ROLES
等jwk-set-uri
。我还计划使用与上述相同的方法支持 Facebook 登录和 Github 登录,所以这样做是否安全或有任何更好的方法推荐。
答案就在访问令牌中的受众声明 (
aud
) 中(或在自省时与其关联)。如果您的资源服务器不属于该受众,则它不应该接受它。
如果您想将自己的声明与身份相关联并控制令牌格式、受众等,那么您的意图是正确的:使用自己的授权服务器并将其他服务器配置为身份源。这个新的授权服务器将成为您的客户端和资源服务器的唯一参考。
Keycloak 是一个非常流行的解决方案。但是,如果您仅使用“外部”身份源(没有或不想共享外部帐户的用户不需要注册和登录),您也可以考虑 Spring 授权服务器。