如何调用由AAD保护的Azure函数

时间:2018-09-01 02:05:34

标签: authentication azure-active-directory azure-functions

我们要调用一个Azure功能,该功能由Azure AD启用身份验证。我们想从外部工具中调用此功能,可能是以自动方式使用http,而不是用户先获得登录提示然后登录。

有什么想法吗?

谢谢 吉里什

1 个答案:

答案 0 :(得分:2)

因此,通常来说,要调用由AAD保护的Azure Functions,您必须找到一种获取令牌的方法,该令牌将允许您进行身份验证。如果不这样做,您将获得HTTP 403并被重定向(或接收重定向链接)以登录。

如果您想自动执行此操作,我假设您将需要在租户中创建一个服务主体:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal

然后,您必须以某种方式获取访问令牌-通过使用裸HTTP请求:

POST https://{tenant}/oauth2/v2.0/token?client_id={client-id}
&scope={scope}
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&client_secret=JqQX2PNo9bpM0uEihUPzyrh

此处描述了以下内容:https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-get-jwt-token

或使用Microsoft.IdentityModel

AuthenticationContext = new AuthenticationContext("https://login.microsoftonline.com/" + Tenant);
Credential = new ClientCredential(clientId, clientSecret);

var result = await AuthenticationContext.AcquireTokenAsync("https://graph.windows.net", Credential);
return result.AccessToken;

然后,您将必须在每个请求中添加Bearer令牌,该令牌将使您无需登录提示即可进行身份验证。