ADAL 身份验证需要设备托管

ADAL Authentication Requires Device managed

我已经为 ADAL 身份验证设置了一个演示应用程序。我们公司要求安装 InTune 应用:https://itunes.apple.com/us/app/intune-company-portal/id719171358?mt=8

安装和设置 InTune 后,我安装了我开发的带有 ADAL 的演示:

  1. 已将 ADAL 添加为 Pod 库

  2. 在我的 Azure 门户 (https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps) 中添加了重定向 URI(一个带有架构://bundle_id,一个带有 msauth://code/schema%3A% 2F%2Fbundle_id)

  3. 添加到应用的 info.plist:

    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>msauth</string>
    </array>
    

4.added 到应用的 info.plist

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>bundle_id</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>schema</string>
        </array>
    </dict>
</array>
  1. 已添加 [_authContext setCredentialsType:AD_CREDENTIALS_AUTO]; 以使用 inTune App Portal 进行经纪人身份验证。

  2. 创建身份验证:

    ADAuthenticationError *error = nil;
     _authContext = [ADAuthenticationContext authenticationContextWithAuthority:@"https://login.microsoftonline.com/common" error:&error];  
    [_authContext setCredentialsType:AD_CREDENTIALS_AUTO];
    
    [_authContext acquireTokenWithResource:@"https://graph.microsoft.com"
                              clientId:@"my_client_id"                          // Comes from App Portal
                           redirectUri:[NSURL URLWithString:@"schema://bundle_id"] // Comes from App Portal
                       completionBlock:^(ADAuthenticationResult *result)
    {
       NSLog(result.accessToken);
     }];
    

应用程序将正确提示用户进行微软身份验证,即在公司页面上重定向到微软身份验证,但在身份验证之后,结果是这样的:

要让 Azure AD 确定设备已被管理以满足条件访问要求,您必须使用 Brokered Authentication。这是通过指定 AD_CREDENTIALS_AUTO(您已完成)、将 msauth 添加到 LSApplicationQueriesSchemes(您已完成)并为您的应用配置适当的回调 URI 方案(您也已完成)来启用的完成)。

将使用的代理是 Microsoft Authenticator 应用程序。如果您没有安装它(ADALios 框架通过检查是否有响应 msauth url 方案的应用程序来确定),则 ADAL 库将默认显示登录表单在您应用的网络视图中。

由于您的应用无法确定设备是否受管理,因此您得到 "authentication successful but your device isn't enrolled" 结果。

安装 Microsoft Authenticator 应用程序后,您会看到它已打开以响应身份验证请求。此应用程序可以确定您设备的注册状态,然后您应该返回到您的应用程序并获得成功的令牌。

可以在库文档中更明确地指出安装身份验证器应用程序的要求,但提到了:

Brokered Authentication

If your app requires conditional access or certificate authentication (currently in preview) support, you must set up your AuthenticationContext and redirectURI to be able to talk to the Azure Authenticator app.