MSAL 身份验证令牌问题

MSAL authentication token issues

我已经在 iOS 中集成了 MSAL 库以获取令牌并发送到我们的 backend 服务器以供进一步使用。我们使用以下代码获取令牌:

let kClientID = "xxxxxx-xxxx-xxxx-xxxx-xxxxxx" 
let kGraphEndpoint = "https://graph.microsoft.com/"
let kAuthority = "https://login.microsoftonline.com/xxxxxx-xxxx-xxxx-xxxx-xxxxxx"
let kScopes: [String] = ["user.read"]

let bundleID = Bundle.main.bundleIdentifier ?? "com.default.test"
let kRedirectUri = "msauth.\(bundleID)://auth"

获取令牌代码:

if let applicationContext = self.applicationContext, let webViewParameters = self.webViewParamaters {
            
    let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: webViewParameters)
    parameters.promptType = .selectAccount
    
    applicationContext.acquireToken(with: parameters) { (result, error) in
        
        if let error = error {
            self.log(text: "Could not acquire token: \(error)")
            return
        }
        
        guard let result = result else {
            self.log(text: "Could not acquire token: No result returned")
            return
        }
        
        self.token = result.accessToken
        
        // calling graph API to get the name and user id ( Success )

        // sending this token to our API backend ( Failure 401 )
        

    }
}

问题:
当 Graph API 在获取令牌后从前端 iOS 应用程序调用时,它正在工作,而当我们将相同的令牌发送到后端时,它在获取 401 error 时不起作用。相同的令牌对后端应用程序无效,但是当我们在 iOS 应用程序中使用 ADAL 库时,这是有效的。

是因为重定向 URI 吗??在 ADAL 中,我们使用 API 端点作为重定向,现在我们使用 "msauth.\(bundleID)://auth" 这种格式。

请帮忙。

您收到的令牌可能仅适用于 MS Graph API,而不是您的 API,因为前端获取 Microsoft Graph API 的访问令牌。

在你的前端,你需要为你的后端指定范围 API 正如@juunas 所提到的。

When your application needs to request an access token with specific permissions for a resource API, pass the scopes containing the app ID URI of the API in the format like this-> app ID URI/scope

来自 MSdocs reference,不同资源的一些示例范围值:

Microsoft Graph API: https://graph.microsoft.com/User.Read

Custom web API:api://11111111-1111-1111-1111-111111111111/api.read

要在门户中设置范围, 转到 Azure AD 中 API 的应用程序注册> 公开 API> 添加范围。 然后,Azure AD 应该会为您提供一个用于 API.

的令牌