服务主体如何登录到我的Azure应用程序服务?

时间:2019-04-25 11:43:07

标签: azure authentication azure-web-sites

我已经通过遵循https://docs.microsoft.com/en-us/azure/app-service/configure-authentication-provider-aad在我的应用程序服务中启用了身份验证,现在每当我访问我的网站终结点时,我都将重定向到Azure AD登录页面,并且在输入凭据时可以继续进行。如何使用服务主体凭据登录?登录页面显然不接受客户端ID。我应该填充一些标头,以便使用服务主体凭据成功发出请求吗?

见解将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

您是正确的,交互式身份验证流程(如登录页面)不适用于应用程序和服务主体,它们仅适用于最终用户。

关于如何继续进行操作的一些重要点:

  1. 利用非交互式身份验证流(例如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

    Program.cs

    是您需要注意的重要代码部分
    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库,并且每个库都有一些相关的示例。

  2. 从权限的角度出发,需要为相关的Web应用程序分配服务主体Application Permissions。另一类权限是Delegated Permissions,但它们仅适用于用户。

  3. 当您询问要填充的标头时,它将是标准的Authorization标头。值的格式为Bearer <access token>。如果您使用诸如ADAL之类的身份验证库,则该库将负责这部分,但是如果您要直接访问REST端点,则需要填充标头。