2017-08-30 66 views
1

我开始使用Azure-Samples/active-directory-b2c-ios-swift-native-msal应用程序来演示Azure B2C租户的功能。我已经完成了刷新令牌功能之外的所有工作。我已添加“offline_access”作用域以确保提供了刷新令牌。Azure B2C刷新令牌功能不适用于iOS Swift示例应用程序

,我得到的第一个错误:

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)" 

      } 

最后,我尝试添加在注册/签到(初始AUTH调用)到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库,因此我不确定是否有某些我丢失的东西。

任何洞察什么是错的将是伟大的!

+0

添加屏幕截图不会让我在问题中发帖:[第三个错误屏幕截图。](http://imgur.com/YgNluPc) –

+0

你能在解答框中发布你的决议吗(这样我们可以确保这个问题已经得到解答,我可以赞成它) – Parakh

回答

0

明白了。用户标识符返回所有小写的策略名称(例如:56d56ec5-96a9-4c23-9717-4ae5d86f967c-b2c_1_policy),因此如果策略使用大写字母,它将无法找到用户(和令牌)。

我通过添加.lowercased()到forPolicy串在getUserByPolicy方法的一端固定它:

for user in withUsers { 
    if (user.userIdentifier().components(separatedBy: ".")[0].hasSuffix(forPolicy.lowercased())) { 
     return user 
    }  
} 

而且必须是一定要上的Xcode的最新版本(8.3.3) 。

相关问题