Oauth2 Spring Security 资源服务器和独立认证服务器
Posted
技术标签:
【中文标题】Oauth2 Spring Security 资源服务器和独立认证服务器【英文标题】:Oauth2 Spring Security Resource Server and Independent Auth Server 【发布时间】:2018-07-08 12:48:47 【问题描述】:大家! 我是 Oauth2 的新手,我有不同的方法。
我有一个疑问。我实际上正在使用 Spring Security 构建一个提供程序服务器,并且我有一个外部访问令牌提供程序(Google 和 AWS Cognito)。
我知道在代码授权流程之后获取访问令牌的过程(这是我想要实现的)。我构建了一个 android 应用程序,它获取代码并更改它以获取访问令牌。
我的问题是: 如何使用 Spring Security 验证我发送到 Provider Server 的令牌是否有效,以访问服务器拥有的受保护资源?
提前谢谢你。
【问题讨论】:
【参考方案1】:我认为有两种选择,要么你获取公钥并自己验证令牌,要么他们有一个端点,你可以发送令牌并知道它是否有效。
像这样的
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
// Specify the CLIENT_ID of the app that accesses the backend:
.setAudience(Collections.singletonList(CLIENT_ID))
// Or, if multiple clients access the backend:
//.setAudience(Arrays.asList(CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3))
.build();
// (Receive idTokenString by HTTPS POST)
GoogleIdToken idToken = verifier.verify(idTokenString);
if (idToken != null)
Payload payload = idToken.getPayload();
// Print user identifier
String userId = payload.getSubject();
System.out.println("User ID: " + userId);
// Get profile information from payload
String email = payload.getEmail();
boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());
String name = (String) payload.get("name");
String pictureUrl = (String) payload.get("picture");
String locale = (String) payload.get("locale");
String familyName = (String) payload.get("family_name");
String givenName = (String) payload.get("given_name");
// Use or store profile information
// ...
else
System.out.println("Invalid ID token.");
链接:https://developers.google.com/identity/sign-in/web/backend-auth
【讨论】:
以上是关于Oauth2 Spring Security 资源服务器和独立认证服务器的主要内容,如果未能解决你的问题,请参考以下文章
Oauth2 资源服务器重叠 Spring Security 配置
Spring security OAuth2 资源服务器 JWT 授权错误
Spring Security 入门(1-3)Spring Security oauth2.0 指南
如何在 Spring Security 中动态指定 OAuth2 资源详细信息?