[英]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”作用域,以確保提供了刷新令牌。
我得到的第一個錯誤:
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方法中。
我收到此錯誤:
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(初始身份驗證調用)中使用的權限/策略添加到AcquireTokenSilent中,並且出現以下錯誤:
我得到:“在緩存中找不到與該參數匹配的令牌。” (不允許我發布第三個鏈接)
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庫不同,因此我不確定是否缺少某些內容。
對可能出問題的任何見解都很棒!
知道了。 返回的useridentifier帶有所有小寫的策略名稱(例如:56d56ec5-96a9-4c23-9717-4ae5d86f967c-b2c_1_policy),因此,如果您的策略有任何大寫字母,它將找不到用戶(和令牌)。
我通過在getUserByPolicy方法的forPolicy字符串的末尾添加.lowercased()來解決此問題:
for user in withUsers {
if (user.userIdentifier().components(separatedBy: ".")[0].hasSuffix(forPolicy.lowercased())) {
return user
}
}
還必須確保使用最新版本的Xcode(8.3.3)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.