我已经通过遵循https://docs.microsoft.com/en-us/azure/app-service/configure-authentication-provider-aad在我的应用程序服务中启用了身份验证,现在每当我访问我的网站终结点时,我都将重定向到Azure AD登录页面,并且在输入凭据时可以继续进行。如何使用服务主体凭据登录?登录页面显然不接受客户端ID。我应该填充一些标头,以便使用服务主体凭据成功发出请求吗?
见解将受到高度赞赏。
答案 0 :(得分:0)
您是正确的,交互式身份验证流程(如登录页面)不适用于应用程序和服务主体,它们仅适用于最终用户。
关于如何继续进行操作的一些重要点:
利用非交互式身份验证流(例如OAuth 2.0 client credentials grant)来获取令牌。
您可以根据您的平台使用相关的ADAL库,或直接访问Azure AD终结点。
此处是直接命中Azure AD终结点的示例。该示例利用了客户机密,在与您的情况相关的情况下,也可以使用证书代替机密。我上面共享的客户端凭据授予链接中的示例确实显示了这一点。
POST /contoso.com/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=625bc9f6-3bf6-4b6d-94ba-e97cf07a22de&client_secret=qkDwDJlDfig2IpeuUZYKH1Wb8q1V0ju6sILxQQqhJ+s=&resource=https%3A%2F%2Fservice.contoso.com%2F
这是另一个使用ADAL for .NET的示例-Calling a Web API in a daemon app or long-running process
是您需要注意的重要代码部分authContext = new AuthenticationContext(authority);
clientCredential = new ClientCredential(clientId, appKey);
AuthenticationResult result = await authContext.AcquireTokenAsync(todoListResourceId, clientCredential);
您没有提到明确使用的平台,所以我共享了.NET示例,因为这是我最熟悉的示例。如果您需要其他版本,请参考Microsoft Docs-Azure Active Directory Authentication Libraries上的本指南,该指南链接到所有不同的受支持的Microsoft库,并且每个库都有一些相关的示例。
从权限的角度出发,需要为相关的Web应用程序分配服务主体Application Permissions
。另一类权限是Delegated Permissions
,但它们仅适用于用户。
当您询问要填充的标头时,它将是标准的Authorization
标头。值的格式为Bearer <access token>
。如果您使用诸如ADAL之类的身份验证库,则该库将负责这部分,但是如果您要直接访问REST端点,则需要填充标头。