在我目前正在处理的 Swift 3.0 项目中,我的客户要求我与其企业 Azure Active Directory 创建的自定义应用程序集成。
我正在使用 ADAL 库 Microsoft (https://github.com/AzureAD/microsoft-authentication-library-for-objc) 它甚至带有 Swift 中的示例。如果我开箱即用,一切正常。但是,当我使用客户的数据配置它时,我总是收到以下错误
AADSTS90130:应用程序"[MyCustomersAppIdinAzureAD]"([MyCustomersAppNameinAzureAD])在/common 或/consumers 端点上不受支持。请使用/组织或特定于租户的终结点。
我想我没有正确配置示例。我已经看到了三个需要配置的常量。以下是我正在使用的值
let kClientId = "[MyCustomersAzureADAppId]"
let kCurrentUserIdentifier = "MSALCurrentUserIdentifier"
let kAuthority = "https://login.microsoftonline.com/[myCustomerAzureId]
我从 Azure 门户获取的客户应用 ID,如下图所示
应用程序标识
我把kCurrentUserIdentifier留给了它的默认值(MSALCurrentIdentifier),因为我真的不知道该放什么。
另一方面,我怀疑关键是"kAuthority"字段。为此,我使用的是从"终结点部分"从客户的 Azure 管理门户获取的 guid,如下图所示
Azure 终结点
我认为这是使用这个库的正确方法。但是,我总是收到相同的错误。我想图书馆正在使用这样的网址
https://login.microsoftonline.com/common/oauth2/authorize?
client_id=app_ud
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&resource=https%3A%2F%2Fservice.contoso.com%2F
&state=12345
而不是使用这个
https://login.microsoftonline.com/[mycustomersguid]/oauth2/authorize?
client_id=app_ud
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&resource=https%3A%2F%2Fservice.contoso.com%2F
&state=12345
但是,我无法在示例中找到修复此值的位置。
终于我让它工作了
在样本中,未使用 kAuthority 常量。
在应用程序创建构造函数中将其作为参数传递确实很神奇。
return try MSALPublicClientApplication(clientId: kClientId, authority: kAuthority)
//In ViewController.swift
let kClientID = "<applicationid>"
// These settings you don't need to edit unless you wish to attempt deeper scenarios with the app.
let kGraphURI = "https://graph.microsoft.com/v1.0/me/"
let kScopes: [String] = ["https://graph.microsoft.com/user.read"]
let kAuthority = "https://login.microsoftonline.com/<your-azzure-tenantid>/"
//In the info.plist
//it is weird but you need to simply add prefix msal with the tenantid
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleURLSchemes</key>
<array>
<string>msal<your-azzure-tenantid></string>
<string>auth</string>
</array>
</dict>
</array>