当客户端在/.auth/login/aad端点上发布访问令牌时,为什么EasyAuth返回401未经授权状态?

时间:2019-04-22 21:26:25

标签: azure oauth-2.0 azure-active-directory azure-functions

随着Microsoft不赞成他们的支持,我开始将Live SDK注册的应用程序迁移到新的Application Registration Portal。

Application Registration Portal

我进入了Azure门户中的“应用程序注册(预览)”页面,并选择创建一个新应用程序。

然后,我转到我的功能应用程序的Authentication / Authorization页上,以放置新注册的AAD应用程序的信息。

我的客户端iOS应用程序先从这些端点获取authorization code,然后再获取有效的access token

https://login.microsoftonline.com/<tenantId>/oauth2/v2.0/authorize

https://login.microsoftonline.com/<tenantId>/oauth2/v2.0/token

手握access token,iOS应用程序正在尝试POST在AAD端点(/.auth/login/aad)上的令牌,但失败。

但是,如果我使用Google帐户获得了authorization codeaccess token,然后将POST access token移至/.auth/login/google端点,它会成功。

问题

当客户端在401 Unauthorized端点上发布access token时,为什么EasyAuth返回/.auth/login/aad状态?

更新

我现在可以从此令牌端点https://login.microsoftonline.com/<tenantId>/oauth2/v2.0/token检索访问令牌,并使用Insomnia / PostmanPOST使用以下对象{{ 1}}到application/json端点:

/.auth/login/aad

我得到的回复是带有以下消息的{ "access_token": "eY...." }

401 Unauthorized

我正在按照与Google帐户完全相同的程序进行操作。我还确保我注册的应用程序允许我的Azure Active Directory中的用户以及个人帐户。这是这些设置的屏幕截图:

AAD settings

2 个答案:

答案 0 :(得分:2)

简短答案:您应该使用“ Azure Active Directory”身份验证提供程序,然后在两个位置A,您的功能应用程序和B)Azure AD应用程序注册中正确配置详细信息。

详细步骤

我尝试通过应用程序注册(预览)通过应用程序注册创建简单的Azure AD身份验证Azure函数。这是我遵循的详细步骤。

A)您的功能应用程序的配置步骤

  1. 在Azure门户中,导航到您的Function App>平台功能>身份验证/授权

    enter image description here

  2. 从身份验证提供程序中选择“ Azure Active Directory”。在配置页面上,选择“高级”作为管理模式。

    ClientID-从您的Azure AD应用程序注册中获取应用程序ID

    IssuerURL-https://sts.windows.net/<your Azure AD Tenant ID>/

    允许令牌受众-https://<yourfunctionappname>.azurewebsites.net/.auth/login/aad/callback

    客户端密钥(可选)-仅与Web应用程序相关。再次从Azure AD应用程序注册中选择密钥/秘密值。

    enter image description here

B)Azure AD应用程序注册的配置步骤

  1. 导航到Azure AD>应用程序注册(预览)>您现有的应用程序注册>概述>

    点击重定向URI,然后添加我们在上面的“允许令牌受众”中添加的值。

    https://<yourfunctionappname>.azurewebsites.net/.auth/login/aad/callback
    
  2. 导航到Azure AD>应用程序注册(预览)>您现有的应用程序注册>清单>编辑和设置

    "oauth2AllowIdTokenImplicitFlow": true
    

答案 1 :(得分:2)

您应该选择Azure Active Directory作为提供程序,而不是Microsoft。然后,将“管理模式”选择为“高级”,并添加已注册应用程序的应用程序ID。

这里有一篇很好的博客文章,解释了该过程:https://www.c-sharpcorner.com/article/secure-azure-function-with-azure-ad/

另请参阅:Azure Function authentication using Azure Active Directory