Azure B2C 刷新令牌功能在 iOS Swift 示例应用程序中不起作用
Azure B2C Refresh Token Functionality Not Working In iOS Swift Sample App
我开始使用 Azure-Samples/active-directory-b2c-ios-swift-native-msal 应用来演示我们的 Azure B2C 租户的功能。我已经让刷新令牌功能之外的一切正常工作。我添加了 "offline_access" 范围以确保提供刷新令牌。
我遇到的第一个错误:
User Nil error
let application = try MSALPublicClientApplication.init(clientId: kClientID, authority: kAuthority)
let thisUser = try self.getUserByPolicy(withUsers: application.users(), forPolicy: kSignupOrSigninPolicy)
application.acquireTokenSilent(forScopes: kScopes, user: thisUser) { (result, error) in
if error == nil {
self.accessToken = (result?.accessToken)!
self.loggingText.text = "Refreshing token silently"
self.loggingText.text = "Refreshed Access token is \(self.accessToken)"
}
所以我尝试从初始授权中存储MSAL用户并将其传递到AcquireTokenSilent方法中。
我收到这个错误:
Failed to find any access token error
let application = try MSALPublicClientApplication.init(clientId: kClientID, authority: kAuthority)
let thisUser = userFromAuth
application.acquireTokenSilent(forScopes: kScopes, user: thisUser) { (result, error) in
if error == nil {
self.accessToken = (result?.accessToken)!
self.loggingText.text = "Refreshing token silently"
self.loggingText.text = "Refreshed Access token is \(self.accessToken)"
}
最后,我尝试将 SignUp/SignIn(初始身份验证调用)中使用的 authority/policy 添加到 AcquireTokenSilent 中,但出现此错误:
我得到:"No tokens matching this arguments found in the cache."(不会让我 post 第三 link)
let application = try MSALPublicClientApplication.init(clientId: kClientID, authority: kAuthority)
let thisUser = userFromAuth
application.acquireTokenSilent(forScopes: kScopes, user: thisUser, authority: kAuthority) { (result, error) in
if error == nil {
self.accessToken = (result?.accessToken)!
self.loggingText.text = "Refreshing token silently"
self.loggingText.text = "Refreshed Access token is \(self.accessToken)"
}
我已经在 Android 示例应用程序中测试了刷新令牌功能,我能够成功刷新令牌,因此我认为我们的 B2C 中没有任何问题。我还了解到 MSAL 库处理刷新的方式与 Android 和 Obj-C 示例中使用的 AppAuth 库不同,因此我不确定是否遗漏了什么。
任何对可能错误的见解都会很棒!
解决了。用户标识符与全部小写的策略名称一起返回(例如:56d56ec5-96a9-4c23-9717-4ae5d86f967c-b2c_1_policy),因此如果您的策略有任何大写字母,它将无法找到用户(和令牌)。
我通过在 getUserByPolicy 方法中将 .lowercased() 添加到 forPolicy 字符串的末尾来修复它:
for user in withUsers {
if (user.userIdentifier().components(separatedBy: ".")[0].hasSuffix(forPolicy.lowercased())) {
return user
}
}
还必须确保使用最新版本的 Xcode (8.3.3)。
我开始使用 Azure-Samples/active-directory-b2c-ios-swift-native-msal 应用来演示我们的 Azure B2C 租户的功能。我已经让刷新令牌功能之外的一切正常工作。我添加了 "offline_access" 范围以确保提供刷新令牌。
我遇到的第一个错误:
User Nil error
let application = try MSALPublicClientApplication.init(clientId: kClientID, authority: kAuthority)
let thisUser = try self.getUserByPolicy(withUsers: application.users(), forPolicy: kSignupOrSigninPolicy)
application.acquireTokenSilent(forScopes: kScopes, user: thisUser) { (result, error) in
if error == nil {
self.accessToken = (result?.accessToken)!
self.loggingText.text = "Refreshing token silently"
self.loggingText.text = "Refreshed Access token is \(self.accessToken)"
}
所以我尝试从初始授权中存储MSAL用户并将其传递到AcquireTokenSilent方法中。
我收到这个错误:
Failed to find any access token error
let application = try MSALPublicClientApplication.init(clientId: kClientID, authority: kAuthority)
let thisUser = userFromAuth
application.acquireTokenSilent(forScopes: kScopes, user: thisUser) { (result, error) in
if error == nil {
self.accessToken = (result?.accessToken)!
self.loggingText.text = "Refreshing token silently"
self.loggingText.text = "Refreshed Access token is \(self.accessToken)"
}
最后,我尝试将 SignUp/SignIn(初始身份验证调用)中使用的 authority/policy 添加到 AcquireTokenSilent 中,但出现此错误:
我得到:"No tokens matching this arguments found in the cache."(不会让我 post 第三 link)
let application = try MSALPublicClientApplication.init(clientId: kClientID, authority: kAuthority)
let thisUser = userFromAuth
application.acquireTokenSilent(forScopes: kScopes, user: thisUser, authority: kAuthority) { (result, error) in
if error == nil {
self.accessToken = (result?.accessToken)!
self.loggingText.text = "Refreshing token silently"
self.loggingText.text = "Refreshed Access token is \(self.accessToken)"
}
我已经在 Android 示例应用程序中测试了刷新令牌功能,我能够成功刷新令牌,因此我认为我们的 B2C 中没有任何问题。我还了解到 MSAL 库处理刷新的方式与 Android 和 Obj-C 示例中使用的 AppAuth 库不同,因此我不确定是否遗漏了什么。
任何对可能错误的见解都会很棒!
解决了。用户标识符与全部小写的策略名称一起返回(例如:56d56ec5-96a9-4c23-9717-4ae5d86f967c-b2c_1_policy),因此如果您的策略有任何大写字母,它将无法找到用户(和令牌)。
我通过在 getUserByPolicy 方法中将 .lowercased() 添加到 forPolicy 字符串的末尾来修复它:
for user in withUsers {
if (user.userIdentifier().components(separatedBy: ".")[0].hasSuffix(forPolicy.lowercased())) {
return user
}
}
还必须确保使用最新版本的 Xcode (8.3.3)。