当前位置: 首页 > 知识库问答 >
问题:

Azure API管理:使用Oauth2 401进行授权时给出“未经授权。访问令牌丢失或无效。”

商和颂
2023-03-14

我想通过Azure API管理公开一些API(逻辑应用程序、函数)。它们工作得很好,所以我决定添加OAuth2自动化。

我一步一步地跟着https://docs.microsoft.com/fr-fr/azure/api-management/api-management-howto-protect-backend-with-aad:

  • 在Azure AD中注册应用程序(后端应用程序)以表示API

在“验证jwt”策略步骤之前,一切都正常。当我添加它时,我得到一个“401-未经授权。访问令牌丢失或无效。”我可以在开发人员控制台和Postman中获取令牌,但只要我调用API。。。401!

当我使用jwt.ms检查令牌的内容时,我注意到aud参数与后端应用程序ID无关。令牌中的值是“00000003-0000-0000-c000-000000000000”,而后端应用程序ID就像“16caXXXX-XXXX-XXXX-XXXX-XXXXXXC0”。

我的想法快用完了,需要一些Azure大师的帮助!非常感谢您的帮助。。。

以下是根据MS doc的入站策略:

<policies>
    <inbound>
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
            <openid-config url="https://login.microsoftonline.com/MY_AD_TENANT_ID/.well-known/openid-configuration" />
            <required-claims>
                <claim name="aud">
                    <value>MY8BACKEND_APP_ID_GUID</value>
                </claim>
            </required-claims>
        </validate-jwt>
    </inbound>
    <backend>
        <forward-request />
    </backend>
    <outbound />
    <on-error />
</policies>

邮递员屏幕的屏幕盖,我从中获取令牌(这可以工作,但当我发送请求时--

jwt中aud参数的屏幕盖。太太

共有3个答案

孙德宇
2023-03-14

如果使用v2版本终结点,请转到-

彭高畅
2023-03-14

您实际上不需要检查aud参数的值。您可以一起删除必需声明,这样令牌的存在和签名仍然会被验证。如果您想确保该令牌是为您的应用程序颁发的,只需找到包含应用程序ID的声明并在name="..."中使用它来匹配您的应用程序ID值。

陆宏壮
2023-03-14

几年前,我在验证Azure AD令牌时遇到了一些问题-请参阅我的文章。

我怀疑问题在于JWT标题中的nonce。

 类似资料:
  • 我在谷歌日历API工作。 问题是当使用刷新令牌时,我得到的是“请求失败:未授权(401)”(刷新令牌是因为用户不应该每次都需要登录) 对于在用户首次授权应用程序后检索的正常访问令牌(未过期),它可以正常工作。 下面是运行时url,它只在不使用刷新的访问令牌之前工作。

  • 任何人都可以帮助或建议我应该坚持什么,以便能够代表用户发布-一旦他们从服务或控制台应用程序给了我们许可。 提前谢了。

  • 我遇到了使用文档签名 API 的第一个障碍,需要一些帮助。 我将docusignrestapi集合导入到Postman中。我设置了iKey、iSec、encodedKeys和codeFromUrl变量。 当尝试发送'01-授权代码授予访问令牌'post API时,我每次都得到以下响应。 我尝试从Postman中删除所有内容,包括环境,并从DocuSign中删除该应用程序,然后重新开始,以便我的所有

  • 我们有一个托管在GCP中的应用程序,它使用GSuite API将用户从GSuite同步到我们的应用程序,并使用服务帐户将用户从GSuite同步到我们的应用程序,反之亦然。它过去工作得很好,直到最近我们的一些客户开始面临问题。 我们开始得到 401未经授权。客户端未经授权使用此方法检索访问令牌,或者客户端未被授权使用任何请求的作用域 我们的应用程序和授予的权限列表都没有更改。以下是授予的api访问权

  • 我正在尝试授权我使用 OAuth 1.0a 进行服务。我可以执行令牌和步骤,但是当我调用 URL 时,我收到 401 未授权响应,并显示以下消息: 我已经屏蔽了凭证和URL。 请求令牌 URL:https://url-to-the-service.com/oauth/requestToken 授权令牌 URL:https://url-to-the-service.com/oauth/authori

  • 我有一个Web api终端,它给我JWT令牌。它不是一个完全授权的服务器。它只是可以生成一个JWT令牌。 现在我有另一个用 aspnet 核心编写的 Web 应用程序。其中在启动中.cs我添加了以下行,以便我可以使用收到的 JWT 令牌进行授权 我也有一个登录表单(在web应用程序中),用户输入用户名和密码,我发送到web api并获得令牌。为了保护web应用程序中的任何控制器,我只使用了[Aut