- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
更新 2015-10-28 - Release 2.4.0 of Google Sign-In for iOS似乎已经解决了这个问题,idToken 和 accessToken 都根据需要通过新的 GIDAuthentication
方法 getTokensWithHandler:
和 refreshTokensWithHandler:
进行刷新。 GIDSignIn
方法 SignInSilently
也会刷新两个 token 。
我的问题是 user.authentication.idToken
在一小时后过期,此时对 AWS 服务的调用失败并出现身份验证错误。我可以使用
user.authentication.accessToken
[self.googleUser.authentication refreshAccessTokenWithHandler:^(NSString *accessToken, NSError *error) {...}
但这不会更新 idToken
。我也试过打电话
[[GoogleSignIn sharedInstance] signInSilently];
它在 session 中第一次调用时为我提供了一个有效的 idToken,但尽管它成功完成,但它不会在同一 session 中的后续调用中刷新 idToken。
我一直在使用
检查/转储 token 内容https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=<idToken>
和
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<accessToken>
我不确定问题是 GIDSignIn 没有更新 idToken,还是 AWS 应该以某种方式使用 refreshToken 在后端自动刷新用户。无论哪种方式,我都没有想法。
下面的代码片段。我已经使用 GoogleSignIn 2.2.0 和 2.3.2 进行了测试,但遇到了同样的问题。
...
@interface MySignInClass <GIDSignInDelegate>
...
-(void) signInWithGoogle
{
GIDSignIn *signIn = [GIDSignIn sharedInstance];
signIn.clientID = MY_GOOGLE_CLIENT_ID;
signIn.shouldFetchBasicProfile = YES;
signIn.scopes = [NSArray arrayWithObjects:@"https://www.googleapis.com/auth/userinfo.profile", @"openid", nil];
signIn.delegate = self;
if([signIn hasAuthInKeychain]) {
[signIn signInSilently];
} else {
[signIn signIn];
}
}
...
- (void)signIn:(GIDSignIn *)signIn
didSignInForUser:(GIDGoogleUser *)user
withError:(NSError *)error
{
if (error != nil) {
[self handleSignInError:error]; // Handle error
}
else {
NSString *idToken = user.authentication.idToken;
NSDictionary* logins = @{@"accounts.google.com": idToken};
self.credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
initWithRegionType:MY_COGNITO_REGION_TYPE
identityId:nil
identityPoolId:MY_COGNITO_IDENTITY_POOL
logins:logins];
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc]
initWithRegion:MY_COGNITO_REGION
credentialsProvider:self.credentialsProvider];
AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
// AWSTask stuff removed for simplicity
AWSTask* task = [self.credentialsProvider getIdentityId];
...
}
}
...
- (void)signIn:(GIDSignIn *)signIn
didDisconnectWithUser:(GIDGoogleUser *)user
withError:(NSError *)error
{
[self handleGoogleSignout]; // Do signout stuff
}
...
最佳答案
调用 GIDSignIn's signInSilently method像这样:
[[GIDSignIn sharedInstance] signInSilently];
这最终会调用您的 signIn:didSignInForUser:withError:
再次使用 idToken 委托(delegate)方法实现。
我已经用 2.4.0 release of Google Sign-In for iOS 验证了这一点上述使用 signInSilently 的方法确实可以为您提供一个未过期的新 idToken。
关于ios - 如何使用 GIDSignIn 或 GIDAuthentication 刷新 authentication.idToken?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33279485/
我有一个使用官方 msal 包的 angular8 应用程序 (not the one for angular, the main one)在后端我授权使用 passport-azure-ad (of
我有一个使用官方 msal 包的 angular8 应用程序 (not the one for angular, the main one)在后端我授权使用 passport-azure-ad (of
我正在尝试按照本指南使新的谷歌一键登录工作: https://developers.google.com/identity/one-tap/web/get-started 当我打电话时: const
我正在 ReactJS 中使用 Apollo 客户端与 GraphQL API 进行通信。我们使用 Firebase 身份验证和 JWT 来确保我们的 API 不会向公众公开私有(private)数据
我有一个登录页面,可以使用signInWithEmailAndPassword() 使用 Javascript 客户端 SDK。 如果登录成功,用户将被重定向(连同 idToken)到成员(membe
我正在使用 onAuthStateChanged: this.unregisterAuthObserver = firebase.auth().onAuthStateChanged(user => {
我尝试验证每次请求时从 Azure AD 获取的 IdToken,但我不断收到错误消息,指出 token 上没有签名。当我验证访问 token 时,它可以工作,但我宁愿使用 Id token ,因为它
我正在尝试从 userData 中的 idToken 中解构 payload。 userData 属于 CognitoUserSession 类型。 import { CognitoUser } fr
我在我的 flutter 应用程序中使用 google_sign_in 进行身份验证。 我按照此处记录的步骤开始: https://github.com/flutter/plugins/blob/ma
我有一个 Swift 应用程序,它实现了 Auth0 的 Web 登录。成功登录后,我会收到一个访问 token 和idToken,它们都存储在我的本地钥匙串(keychain)中。下次登录时,我首先
是否可以撤销使用 username 和 password 进行用户身份验证后获得的 AWS Cognito IdToken? 在我的用例中,对 API Gateway 端点的访问受到 Cognito
我的 firebase 前端有以下代码: document.querySelector('#sign-out').addEventListener('click', () => { fir
我使用 AWS Cognito SDK 创建了一个 .net Core API,通过将凭证发布到我的 API 并将 JWT 返回到一个简单的客户端应用程序(纯 HTML/TypeScript)来对用户
我在 Node.js 中有一个后端 API,可从查询参数中检索 Amazon Cognito ID token 。我需要检查此 token 是否有效。有什么方法可以使用 aws-sdk 或 amazo
我有一个为 Android 客户端提供服务的后端,使用从 Android 应用程序发送的 IdToken 对它们进行身份验证。现在,我需要验证在使用我的 api 的 aws 上运行的服务。所以我认为服
我在 Node.js 中有一个后端 API,可从查询参数中检索 Amazon Cognito ID token 。我需要检查此 token 是否有效。有什么方法可以使用 aws-sdk 或 amazo
我有一个为 Android 客户端提供服务的后端,使用从 Android 应用程序发送的 IdToken 对它们进行身份验证。现在,我需要验证在使用我的 api 的 aws 上运行的服务。所以我认为服
有没有办法可以访问在 auth0 规则上下文中创建用户时生成的 idtoken? 我想将用户注册同步到我的后端系统,并需要 auth0 注册会生成的 idtoken。这样我就可以在我的规则触发器中发布
https://developers.google.com/identity/sign-in/android/start?hl=zh-tw 我按照这个页面,一步一步来。 我可以签名、获取 Id、发送电
我正在构建一个带有 rest API 的 Java 服务器,我正在使用 Firebase 对我的用户进行身份验证。 当用户进行重置调用时,他会发送我正在使用下一个方法验证的 Firebase toke
我是一名优秀的程序员,十分优秀!