iOS端MSGraph SDK中如何获取id_token?
获取MS Graph SDK iOS中的id_token解决方案
我之前在做iOS端Office 365登录集成时,也碰到过找不到id_token的问题,其实只要调整几个配置就能拿到AAD定义的id_token,下面是具体步骤:
确保请求包含OIDC必需的Scope
id_token是OpenID Connect(OIDC)协议的产物,必须在认证请求中加入openid和profile这两个scope,才能触发AAD返回id_token。在初始化MSALPublicClientApplication或者发起登录请求时,你的scope数组应该类似这样:NSArray *scopes = @[@"openid", @"profile", @"User.Read"];这里
User.Read是获取用户详情需要的Graph权限,加上OIDC的两个scope后,认证流程就会返回id_token。从MSAL认证结果中直接提取id_token
当用户登录成功后,你会拿到MSALResult对象,这个对象里的idToken属性就是你要的AAD标准id_token。比如在登录回调里:[application acquireTokenForScopes:scopes completionBlock:^(MSALResult *result, NSError *error) { if (!error) { // 这里就是你要的id_token NSString *idToken = result.idToken; // 同时你也能拿到refresh token NSString *refreshToken = result.refreshToken; } }];从缓存中获取已登录用户的id_token
如果用户已经登录过,你可以通过MSAL的缓存机制获取id_token:[application allAccountsWithCompletion:^(NSArray<MSALAccount *> *accounts, NSError *error) { if (!error && accounts.count > 0) { MSALAccount *account = accounts.firstObject; [application acquireTokenSilentForScopes:scopes account:account completion:^(MSALResult *result, NSError *error) { if (!error) { NSString *idToken = result.idToken; } }]; } }];
另外补充一点:你提到安卓端用的是https://outlook.office.com/api/v2.0作为基础地址,其实不管是调用Outlook API还是MS Graph,底层都是通过AAD完成认证,所以安卓端获取id_token的逻辑和iOS类似,只要确保请求了OIDC的scope,就能从MSAL Android的认证结果中拿到对应的id_token。
内容的提问来源于stack exchange,提问作者derpoliuk
相关产品推荐
相关产品推荐

