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

使用Azure API管理和第三方授权服务器验证传入请求中的授权令牌

唐兴贤
2023-03-14

我必须用第三方授权服务器在我的项目中实现OAuth 2.0。我的客户机和服务器都已经在AS上注册了。我在Azure上创建了一个API管理实例,并导入了swagger APIs。我希望每个传入的请求都根据我的AS进行验证,所以我只需要将请求重定向到https://my-as.com/as/introspect.oauth2,并验证令牌。如果令牌有效,则让它继续,否则发送401。我试图使用“入站处理”来实现这一点,并参考了以下文档:https://learn . Microsoft . com/en-us/azure/API-management/API-management-how to-protect-back end-with-aad # configure-a-jwt-validation-policy-to-pre-authorize-requests。

唯一的问题是,我使用的是第三方AS而不是Azure AD。我尝试用我的URL替换示例XML代码中的URL,但它不起作用。

如何将请求重定向到授权服务器以验证访问令牌?

共有1个答案

李浩邈
2023-03-14

添加以下入站策略成功:

<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://my-as.com/as/introspect.oauth2</set-url>
            <set-method>POST</set-method>
            <set-header name="Content-Type" exists-action="override">
                <value>application/x-www-form-urlencoded</value>
            </set-header>
            <set-body>@($"grant_type=urn:pingidentity.com:oauth2:grant_type:validate_bearer&client_id=UoM&client_secret=somesecret&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 response-variable-name="existing response variable">
                    <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>
 类似资料:
  • 授权交互流程 获取已授权信息 参数说明: 字段 类型 必须? 说明 type ThirdAuth 是 获取第三方授权信息标识。 如:SDKThirdAuthType.QQ、SDKThirdAuthType.WX deviceTypeId String 是 设备类型 deviceId String 是 设备SN SDKThirdAuthToken 说明 字段 类型 必须? 说明 access_tok

  • YurunOAuthLogin 是一个PHP 第三方登录授权 SDK,集成了QQ、微信、微博、Github等常用接口。可以轻松嵌入支持 PHP >= 5.4 的任何系统中,2.0 版现已支持 Swoole 协程环境。 支持的登录平台 QQ、QQ 小程序 微信网页扫码、微信公众号、微信小程序 微博 百度 Github Gitee Coding 开源中国(OSChina) CSDN 后续将不断添加新的

  • 一、授权用户对授权版本信息的管理 1、登录官网,打开个人中心-订单管理 授权流程: 1.当购买授权后,绑定一级域名 2.下载授权证书(加密文件) 3.填写授权码 2、打开后台-设置-授权管理-授权信息 当商家已购买授权时,直接输入授权码;当未购买授权时,点击授权进入官网自行购买 二、在线更新 3.2.0版本后支持在线更新,官方发布版本更新消息后,用户可自行下载更新最新版本。

  • 授权交互流程 获取已授权信息 参数说明: 字段 类型 必须? 说明 type ThirdAuth 是 获取第三方授权信息标识。 如:ThirdAuth.QQ、ThirdAuth.WX、ThirdAuth.XMLY deviceTypeId String 是 设备类型 deviceId String 是 设备SN ThirdOauthToken 说明 字段 类型 必须? 说明 access_toke

  • 授权管理器为将基于角色的访问控制集成到应用程序提供了灵活的框架。它让使用这些应用程序的管理员可提供对那些与作业功能相关的已分配用户角色进行访问的权限。

  • 现在,我了解了访问令牌和刷新令牌,但我不知道如何实现它。 我有一个项目,前端是棱角分明的,后端是node.js的,前面有微服务架构和网关。我可以使用像oaust2授权服务器一样的aust0,用户存储在里面? 怎么做?在aust0文档中有大量的说明,我不明白哪个适合我。 我必须通过网关拦截登录、注销和注册,并重定向到auth0,或者我必须在我的用户微服务内部完成这些操作? 在我的项目中,还有个人信息