edo*_*rnd 6 spring android spring-boot spring-security-oauth2 google-signin
正如标题所说,我试图使用谷歌登录在API使用Spring的引导后端服务器,如所描述这里。
只是为了描述上下文,Spring 后端基本上是一个资源+身份验证服务器,它目前通过 Google SSO 或简单的表单登录(类似于此处描述的内容)向包含前端网站的第二个 Spring Boot 应用程序提供 Oauth2 身份验证。
我最初的想法是通过简单地向 android 应用程序提供访问令牌并将其作为“承载”附加到每个请求来模仿@EnableOauth2Sso注释。为此使用用户凭据非常简单:我只是向位于“/oauth/token”的服务器发出请求,使用用户插入的凭据作为身份验证,然后我正确地收到了访问令牌。
现在,我完全不知道如何在 Android 中使用 Google API 构建类似的过程。我之前链接的教程页面描述了如何获取令牌 ID 以及服务器应如何验证它,但之后我不知道该怎么做。
到目前为止,我已经成功地向安全链添加了一个过滤器,它可以像这样简单地检查令牌:
private Authentication attemptOpenIDAuthentication(@NonNull String tokenString){
String clientId = authServices.getClientId();
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, factory)
.setAudience(Arrays.asList(clientId, androidClient))
.build();
try {
GoogleIdToken token = verifier.verify(tokenString);
if (token != null) {
return authServices.loadAuthentication(token.getPayload());
} else {
throw new InvalidTokenException("ID token is null");
}
} catch (GeneralSecurityException | IOException e) {
throw new BadCredentialsException("Could not validate ID token");
}
}
Run Code Online (Sandbox Code Playgroud)
这确实可以创建一个 Authentication 对象,但是如何在身份验证过滤后生成访问令牌?
回顾一下,到目前为止我有:
Android 应用程序成功检索到 Google 令牌 ID 并将其发送到服务器
服务器成功拦截请求并验证令牌
我基本上错过了将正确的访问令牌返回给 Android 客户端的第三点。这是一个简单的方案,可以更好地了解情况:

有没有其他方法可以验证令牌并从服务器获取访问令牌,还是应该完全更改 Android 上的身份验证程序?
小智 0
据我所知:是的,您需要来自服务器的访问令牌。如果我理解正确的话,Web 应用程序已经通过后端的 Oauth 进行了身份验证,因此这里的过程类似:使用 google-ID 加载用户并生成令牌。在我的应用程序中,我使用了有效期为 30 天的 JWT。如果令牌过期,应用中的 Google 身份验证通常仍然有效,因此可以使用 Google ID 续订令牌。使用 Oauth,您还可以直接发送刷新令牌。重要的是,应用程序始终首先检查 Google 身份验证,然后才在第二步检查后端。
对于后端的身份验证过程,您可能需要为此手动实现专用的安全配置。看看 jhipster 项目,他们实现了自定义 jwt 身份验证,这可能会让您了解它是如何工作的。
| 归档时间: |
|
| 查看次数: |
1862 次 |
| 最近记录: |