【问题标题】:Web API .Net Core Azure Active Directory AuthenticationWeb API .Net Core Azure Active Directory 身份验证
【发布时间】:2017-09-05 04:09:46
【问题描述】:

使用 Angular2 和 ASP.NET Core (Web API)。

目前我通过 UI 成功登录,并且正在存储返回的 id 令牌。我创建了 API,然后选择了工作或学校身份验证。自从我创建项目以来,什么都没有改变。问题是我无法验证来自 Angular 的请求(我也尝试过使用 Postman)。每次我得到401。

将听者设置为授权:承载者 xxx,我正在传递 id 令牌。

这是我登录后存储的数据。我作为标题附加的是 adal.idtoken

任何帮助将不胜感激

【问题讨论】:

    标签: angular azure asp.net-web-api azure-active-directory asp.net-core-webapi


    【解决方案1】:

    您必须将 访问令牌 传递给授权标头,而不是 id 令牌。

    id 令牌仅包含有关已登录用户的信息(声明),而访问令牌包含有关用户有权访问哪些受保护资源的信息。

    【讨论】:

    • 好的,目前我正在使用 'ng2-adal' 你包装了登录功能。这将我发布的内容存储为上面的图像。所以我应该做一些额外的事情来获取访问令牌。我知道当我收到授权代码时是否执行“代码”流程,然后将其交换为访问令牌,但这里是什么情况?我错过了什么吗?我正在尝试应用这里写的内容:docs.microsoft.com/en-us/azure/active-directory/develop/…
    • 您只需要获取资源的访问令牌并在标头中传递它。对于单页应用程序,您不要使用授权代码流,因为这会将客户端密码暴露给服务器。相反,您应该使用 隐式流。
    • 好的,所以我启用了“oauth2AllowImplicitFlow”:true。然后,当我到达 URL 中的登录页面时,我有 response_type=id_token+token。如果我成功登录,它会告诉我“未提供资源标识符”。当我在 url 中仅指定令牌时,我得到的结果相同。
    • 所以看起来来自 ng-adal 的请求缺少 client_id。您可能需要检查您的配置,我使用 ng-adal 对 AAD 没有任何问题。
    • 这是我发送的 url 模板login.microsoftonline.com{{xx}}.onmicrosoft.com/oauth2/authorize?response_type=id_token+token &client_id={{client_id_guid}} &redirect_uri=http% 3A%2F%2Flocalhost%3A4200%2Faccess%2Flogin &state=36d5cf06-f581-4c6b-ba2c-384e79366b42 &nonce=8f1511aa-74ae-442b-8d45-aa55cfa35654 &client-request-id=1edfb669-db66x36666 client-SKU=Js &x-client-Ver=1.0.14 但我得到解释错误:' Resource identifier is not provided' 。我应该为资源输入什么?
    【解决方案2】:

    与 js 的 adal 一样,access token 保存为 id_token。我们可以从https://github.com/AzureAD/azure-activedirectory-library-for-js/blob/master/lib/adal.js#L895 的源代码中获取信息。所以我们在js使用adal的时候可以使用id_token对资源进行认证。

    根据您的描述,对于 401 问题,请仔细检查 Azure 门户上 Web API 应用程序的 Authentication 设置。
    Client ID 和 Issuer Url 中使用的 id 字符串应该与您在 ng2 配置中使用的客户端 id 和租户 id 相同。

    要检查它是否已配置,您可以利用 fiddler 或 Postman 使用您从 ng2 获得的 id_token 标头发出带有 Authentication 的 http 请求。

    您也有类似的问题,他正在使用 ng2-adal 并在使用令牌访问资源时获得 401。你可以试试Angular 2 SPA Azure Active Directory JWT Issue的答案。

    【讨论】:

      猜你喜欢
      • 2019-10-31
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2018-05-29
      • 2020-07-30
      相关资源
      最近更新 更多