【问题标题】:ADAL Authentication Requires Device managedADAL 身份验证需要设备管理
【发布时间】:2019-02-15 20:09:24
【问题描述】:

我已经为 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(一个带有 schema://bundle_id,一个带有 msauth://code/schema%3A%2F%2Fbundle_id)

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

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

4.添加到应用的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);
     }];
    

应用程序会正确提示用户进行microsoft authentication,即在公司页面的microsofth authentication上重定向,但是在Authentication之后,结果是这样的:

【问题讨论】:

  • 您的设备是否受到管理? IE。它是否显示在 Comp Portal 应用程序的“设备”下?
  • 是的,显示出来了
  • 设备显示为“合规”?如果您点击“立即注册”会发生什么?您是否收到设备已注册的错误消息?这是条件访问失败。您应该让您的 AD 管理员查看已将哪些条件访问策略应用于图形端点和您的应用程序 ID
  • @Paulw11如果我按下按钮,将出现一个 HTML 页面,其中包含在 Intune 上打开 AppStore 的按钮
  • @Paulw11 在 Android 上使用相同的 AD 应用程序没有问题

标签: ios objective-c azure azure-active-directory adal


【解决方案1】:

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

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

由于您的应用无法确定设备是否被托管,您会得到“认证成功但您的设备未注册”的结果。

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

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

Brokered Authentication

如果您的应用需要条件访问或证书身份验证(当前为预览版)支持,您必须设置 AuthenticationContext 和 redirectURI 才能与 Azure Authenticator 应用通信。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2021-10-10
    • 1970-01-01
    • 2017-07-02
    • 2012-04-07
    • 1970-01-01
    相关资源
    最近更新 更多