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

在Azure API管理Oauth2服务中指定访问群体参数

路和悌
2023-03-14

我正试图在Azure API管理中设置Oauth2身份验证服务,以便在开发者门户中的Auth0身份提供程序中对用户进行身份验证<但是,我无法配置Oauth2服务来传递audience参数以获取JWT令牌(现在只返回不透明令牌)。

我在Azure门户中创建了一个新的Oath2服务,在“附加身体参数”部分指定了受众:

接下来,我将Oath2服务添加到API中:

接下来,当我尝试在开发者门户中测试API时,我只得到一个不透明令牌:

我希望在“附加参数”一节中指定时会包括观众,但这似乎不起作用<所以我想知道是不是我做错了什么。

共有2个答案

赵健柏
2023-03-14

我们对此问题的解决方案是在Auth0的“设置”下设置“默认观众”:

这样,当请求中没有提供受众时,Auth0将使用默认受众作为后备。

柴增
2023-03-14

您可以配置jwt验证器策略以使用引用/不透明令牌。

政策声明

<inbound>
  <!-- Extract Token from Authorization header parameter -->
  <set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("Authorization","scheme param").Split(' ').Last())" />

  <!-- Send request to Token Server to validate token (see RFC 7662) -->
  <send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
    <set-url>https://microsoft-apiappec990ad4c76641c6aea22f566efc5a4e.azurewebsites.net/introspection</set-url>
    <set-method>POST</set-method>
    <set-header name="Authorization" exists-action="override">
      <value>basic dXNlcm5hbWU6cGFzc3dvcmQ=</value>
    </set-header>
    <set-header name="Content-Type" exists-action="override">
      <value>application/x-www-form-urlencoded</value>
    </set-header>
    <set-body>@($"token={(string)context.Variables["token"]}")</set-body>
  </send-request>

  <choose>
        <!-- Check active property in response -->
        <when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] == false)">
            <!-- Return 401 Unauthorized with http-problem payload -->
            <return-response>
                <set-status code="401" reason="Unauthorized" />
                <set-header name="WWW-Authenticate" exists-action="override">
                    <value>Bearer error="invalid_token"</value>
                </set-header>
            </return-response>
        </when>
    </choose>
  <base />
</inbound>

您可以在https://jwt.io/解码令牌,并使用入站部分中使用的validate-jwt策略重新验证它:例如:

解码令牌有效负载中的Audience应与validate-jwt策略的声明部分匹配:

您可以参考Jwt验证策略中的open GitHub issue with reference Token?,使用授权服务器验证引用令牌,使用Azure AD使用OAuth2验证Azure API管理,并在APIM中使用OAuth2.0保护API

 类似资料:
  • 我感到困惑的是,在向授权服务器发送授权请求时,似乎没有标准的方法来指定访问令牌的受众。 OAuth2将访问令牌指定为不透明字符串;规范中只有一处提到了“观众”,即访问令牌可以是“观众限制的”。许多最近的授权服务器实现似乎产生了JWT访问令牌,JWT指定了受众(aud)声明。 据我所知:-Auth0使用“audience”参数-Connect2id使用“resource”参数-Identity Se

  • 本文向大家介绍无法访问SAP服务器中的SOAP管理器,包括了无法访问SAP服务器中的SOAP管理器的使用技巧和注意事项,需要的朋友参考一下 SAP服务器将不响应具有IP的请求,但不响应域名。因此,您只需将域添加到主机文件中。您可以在drivers / etc文件夹中的主机文件夹中找到主机文件。那应该解决您的问题。

  • 我正在尝试通过Azure API管理将推送消息发布到Azure服务总线主题。通过SAS身份验证,我可以做到这一点,但现在我想依靠托管服务标识。 我可以使用此策略检索OAuth令牌: 但是当我将消息推送到主题(https://my-namespace.servicebus.windows.net/mytopic/messages)时,我得到令人沮丧的40104:无效的授权令牌观众。 如果我尝试为以下

  • 我是一个码头工人,我在前几天阅读了如何使用它的官方教程。我决定将我非常简单的spring-boot应用程序作为服务部署到集群中,但我无法从外部访问它。顺便说一下,当我用docker run启动docker时,容器是可以访问的。 所以我的春靴tomcat正在收听8081。 Dockerfile: docker-compose.yml: 我部署了两个服务,一个可视化程序和一个Spring引导应用程序。

  • 下载 PC控制端 到PC机或者笔记本上。 下载完成后进行安装,在安装界面选择安装路径。如不需要修改则以默认路径进行安装。 安装成功后,通过注册的云中心账号登录客户端,就可以对Linux和Windows服务器端进行管理。

  • 一些 Dreamweaver 功能需要 Internet 连接。如果您或您的组织通过代理服务器来路由 Internet 连接,则必须提供 Dreamweaver 的服务器凭据,以便成功连接到 Internet。 您可以在 Adobe Creative Cloud 中为桌面应用程序指定代理服务器凭据。Creative Cloud 桌面应用程序在首次启动时,会确定是否通过代理服务器来路由 Intern