寻找一种获取应用程序访问令牌的方法,该令牌可以调用API而无需用户登录。我已经使用Azure AD完成了此用例,在其中我获得了应用程序访问令牌将文档写入SharePoint库。我对Prem AD FS以及如何使用客户端机密获取访问令牌的访问方式还不够熟悉,因此不必干扰用户。
背景
我们已经在一组API上构建了一个定制的帮助台应用程序。我们的目标是能够从需要创建票证的其他系统(应用程序)创建票证。这样做的想法是生成具有API权限的访问令牌,这样我就可以创建票证,而不会提示用户登录,因为在某些情况下票证并非特定于用户。
用例示例
我们有一个应用程序,规定非员工可以访问我们环境中的资源。这些非雇员有与他们相关的结束日期,当结束日期过去且未事先更新时,将需要生成票证以供团队更新其在AD中的记录。
我做了什么
我在AD FS中创建了一个“服务器应用程序”,并生成了一个客户端机密。我可以使用客户端机密进行请求并获取访问令牌,但是,它并不是“链接”到我需要调用的Wep API上的。
我如何授予服务器应用程序访问Web API的权限?
其他 我们正在Server 2016上使用AD FS。
答案 0 :(得分:1)
您需要confidential client流程。
基本上,您需要配置一个应用程序和一个Web API。
默认情况下,应用程序具有调用该Web API的权限,但是您可以使用访问控制策略。
还请注意,您可以在Web API上配置声明规则。
This也可能有用。
答案 1 :(得分:0)
发现了问题,该问题导致我通过服务器应用程序接收到的令牌给我一个来自API的“拒绝授权”响应。
事实证明,AD FS配置正确,问题出在我的API中,具有有效的访问者和有效的颁发者。
app.UseActiveDirectoryFederationServicesBearerAuthentication(new ActiveDirectoryFederationServicesBearerAuthenticationOptions
{
MetadataEndpoint = ConfigurationManager.AppSettings["ADFS:MetadataEndpoint"],
TokenValidationParameters = new TokenValidationParameters()
{
ValidAudiences = GetValidAudiences(),
ValidIssuers = GetValidIssuers()
}
});
我需要在访问令牌中包括服务器应用提供的发行人和受众
ValidIssuer示例
microsoft:identityserver:{appIdentifier}
ValidAudience示例
http://{fqdn}/adfs/services/trust
在将这些令牌添加到validIssuer和validAudience中之后,访问令牌才能完美运行。