(对于这个问题的冗长,我深表歉意;我想更加详尽。)
我是Azure的新手,正在尝试设置一个需要身份验证的“无服务器” API。我有一个在未未启用身份验证时正常运行的功能(在Node.js中基本上只是“ Hello,world”)。但是,启用身份验证后,唯一的响应是:
You do not have permission to view this directory or page.
要启用身份验证,我:
https://<myapp>.azurewebsites.net/.auth/login/microsoftaccount/callback
的Web重定向URI。这时,如果没有身份验证,我将无法再访问API端点(如预期的那样)。然后,我配置邮递员通过以下方式获取令牌:
https://<myapp>.azurewebsites.net/.auth/login/microsoftaccount/callback
(与我在上面的“应用注册”中输入的网址相同)。https://login.microsoftonline.com/<Directory (tentant) ID>/oauth2/authorize?resource=<Application (client) ID>
https://login.microsoftonline.com/<Directory (tentant) ID>/oauth2/token?resource=<Application (client) ID>
当我单击“发送”时,出现上述错误。如果我禁用身份验证或将“采取措施...”更改为允许未经授权的请求,它将再次开始工作(但当然不需要身份验证)。据我所知,我已经运行了邮递员通过JWT.io收到的JWT,有效载荷看起来合理:
{
"aud": "<Application (client) ID>",
"iss": "https://login.microsoftonline.com/<Directory (tentant) ID>/v2.0",
"iat": 1558488698,
"nbf": 1558488698,
"exp": 1558492598,
"aio": "<base64? data>",
"azp": "<Application (client) ID>",
"azpacr": "1",
"idp": "live.com",
"name": "Ben Blank",
"oid": "<a GUID I don't recognize>",
"preferred_username": "ben.blank@gmail.com",
"scp": "User.Read",
"sub": "<base64? data>",
"tid": "<Directory (tentant) ID>",
"uti": "<base64? data>",
"ver": "2.0"
}
谁能告诉我我做错了什么?
答案 0 :(得分:1)
您需要将Postman注册为AAD中的客户端应用,并授予其调用API的权限,类似于here,除了您将授予其访问API的权限(而不是链接中的AAD图形)。您的邮递员将需要配置为使用该应用的客户端ID和密码来获取令牌。现在,您正在使用Postman要求您的API应用程序获取自身的访问令牌。您的应用很可能没有在AAD中配置为可自行调用! (无论如何都没有道理。)
答案 1 :(得分:0)
您正在使用Microsoft帐户作为身份验证提供程序。获取访问令牌的方式与Azure Active Directory有关,而不与Microsoft Account有关。
访问函数网址https://tonytest4.azurewebsites.net/api/HttpTrigger1?name=test时,您将重定向到登录页面。您会发现URL为https://login.live.com/oauth20_authorize.srf?
。输入正确的凭据后,您将可以访问您的功能。