簡體   English   中英

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”作用域,以確保提供了刷新令牌。

我得到的第一個錯誤:

用戶無錯誤

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM