这是我想要完成的事情 - 一个本机应用程序,它将在我无法让用户登录的系统上运行,但我想使用不记名令牌访问AAD后面的Web服务。有两种选择 -
问题我遇到了: 当我使用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"}
因此,鉴于客户端的秘密确实是正确的(我对此持肯定态度),这个错误背后的真正问题是什么呢?
提前感谢您的帮助:)
答案 0 :(得分:0)
您无法使用本机应用程序客户端ID和Web应用程序客户端凭据(客户端密钥)。本机应用程序没有相关的秘密,只有Web应用程序具有。假定本机应用程序在不安全的主机上运行,例如台式机和智能手机。客户机密将变得太脆弱。
有关如何验证本机应用程序和访问资源的更多信息,请查看以下文章:
答案 1 :(得分:0)
我们可以在Azure Active Directory中注册两种类型的应用程序。
本地应用程序是OAuth2的公共客户端。这些应用程序只能在设备上运行,并且不受信任来维护机密-因此,它们在目录中的输入没有相应的属性。没有秘密,就无法断言应用程序的身份-因此,此类应用程序无法获得应用程序级别的权限,门户网站UX反映了这一点。相反,再次用OAuth2的话来说,Web应用是机密客户端。他们可以为用户获取委派的令牌,但是他们也可以使用客户端凭据自己获取令牌。原生应用可以通过OAuth2授权授予为用户获取令牌。
进一步参考this文章。