来自本机应用程序的Azure Active Directory身份验证,无需用户登录

时间:2016-08-20 02:20:52

标签: azure authentication adal

这是我想要完成的事情 - 一个本机应用程序,它将在我无法让用户登录的系统上运行,但我想使用不记名令牌访问AAD后面的Web服务。有两种选择 -

  1. 使用基于证书的流程(我想避免出于某些原因 特定于我的项目)
  2. 使用客户端密钥
  3. 问题我遇到了: 当我使用Native AAD应用程序的客户端ID和使用AAD Web应用程序(本机应用程序有权访问)构建的客户端凭据调用acquiretokenasync时,我收到以下错误 -

    {" AADSTS70002:验证凭据时出错。 AADSTS50012:提供了无效的客户端密码。\ r \ nTrace ID:f52cc954-2674-47ee-9a7b-094451b05c7c \ r \ n相关ID:1ba8ac64-cc4a-4ff7-83d6-a333504459d6 \ r \ n时间戳:2016-08-20 01: 45:08Z"}

    因此,鉴于客户端的秘密确实是正确的(我对此持肯定态度),这个错误背后的真正问题是什么呢?

    提前感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

您无法使用本机应用程序客户端ID和Web应用程序客户端凭据(客户端密钥)。本机应用程序没有相关的秘密,只有Web应用程序具有。假定本机应用程序在不安全的主机上运行,​​例如台式机和智能手机。客户机密将变得太脆弱。

有关如何验证本机应用程序和访问资源的更多信息,请查看以下文章:

答案 1 :(得分:0)

我们可以在Azure Active Directory中注册两种类型的应用程序。

  1. 为安装在本地的客户端应用程序选择“本机” 一个装置。此设置用于OAuth公共本地客户端。
  2. 为安装在安全服务器上的客户端应用程序和资源/ API应用程序选择Web应用程序/ API。此设置是     用于OAuth机密Web客户端和基于公共用户代理的     客户。同一应用程序还可以公开客户端和客户端     资源/ API。

本地应用程序是OAuth2的公共客户端。这些应用程序只能在设备上运行,并且不受信任来维护机密-因此,它们在目录中的输入没有相应的属性。没有秘密,就无法断言应用程序的身份-因此,此类应用程序无法获得应用程序级别的权限,门户网站UX反映了这一点。相反,再次用OAuth2的话来说,Web应用是机密客户端。他们可以为用户获取委派的令牌,但是他们也可以使用客户端凭据自己获取令牌。原生应用可以通过OAuth2授权授予为用户获取令牌。

进一步参考this文章。