草庐IT

ios - ADAL 身份验证需要设备托管

coder 2024-01-22 原文

我已经为 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.添加到app的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 确定设备是受管理的以满足条件访问要求,您必须使用代理身份验证。这是通过指定 AD_CREDENTIALS_AUTO(您已完成)、将 msauth 添加到 LSApplicationQueriesSchemes(您已完成)并配置适当的回调 URI 来启用的为您的应用制定方案(您也已完成)。

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

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

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

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

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.

关于ios - ADAL 身份验证需要设备托管,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52273913/

有关ios - ADAL 身份验证需要设备托管的更多相关文章

  1. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  5. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  6. ruby - rspec 需要 .rspec 文件中的 spec_helper - 2

    我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只

  7. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  8. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

  9. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  10. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

随机推荐