首页 > 其他分享 >【Azure APIM】APIM 策略语句如何读取请求头中所携带的Cookie信息并保存为变量

【Azure APIM】APIM 策略语句如何读取请求头中所携带的Cookie信息并保存为变量

时间:2024-01-03 23:02:24浏览次数:43  
标签:cookie xxxx require token 头中 Cookie APIM Select

问题描述

需要在APIM策略中对请求所携带的Cookie中的token值进行JWT验证,如果获取Cookie中的值并且作为变量保存,然后在JWT 验证中使用呢?

 

问题解答

第一步:获取Cookie中的Token值

使用C#语句 @(context.Request.Headers.GetValueOrDefault("cookie", "").Split(';').Select(x => x.Trim()).Select(cookie => cookie.Split('=')).SingleOrDefault(cookie => cookie[0] == "Token")?[1]) 获取到Token信息, 需要注意:Select中的lambda表达式需要根据实际情况进行修改。

示例Cookie信息如:

Cookie:    test=123; "test222=222222222222"; test222=222222222222; token=eyJ0**LCJhbGci**************************7Yat3****H5A; test111=ey***vDH5A

请求中所携带的Cookie截图:

【Azure APIM】APIM 策略语句如何读取请求头中所携带的Cookie信息并保存为变量_microsoft

第二步:把值保存为变量

使用set-variable 设置token变量,存储第一步中获取的值。

示例Policy为:

<set-variable name="token" 
value="@(context.Request.Headers.GetValueOrDefault("cookie", "").Split(';')
  .Select(x => x.Trim())
  .Select(cookie => cookie.Split('=')).SingleOrDefault(cookie => cookie[0] == "stored-token")?[1])"
 />

 

第三步:在JWT验证中获取变量值

使用 validate JWT 策略,使用 token-value="@(context.Variables.GetValueOrDefault<string>("token", "no value"))"  来代替 header-name="Authorization"

示例Policy为:

<validate-jwt 
  token-value="@(context.Variables.GetValueOrDefault<string>("token", "no value"))" 
  failed-validation-httpcode="401" 
  require-expiration-time="false" 
  require-scheme="Bearer" 
  require-signed-tokens="true">
<openid-config url=https://login.partner.microsoftonline.cn/<your azure tenant id>/v2.0/.well-known/openid-configuration />
  <audiences>
    <audience><your audience, GUID ></audience>
  </audiences>
</validate-jwt>

 

完整的Policy示例为:

<policies>
    <inbound>
        <base />
        <set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("cookie", "").Split(';').Select(x => x.Trim()).Select(cookie => cookie.Split('=')).SingleOrDefault(cookie => cookie[0] == "token")?[1])" />
        <validate-jwt token-value="@(context.Variables.GetValueOrDefault<string>("token", "no value"))" failed-validation-httpcode="401" require-expiration-time="false" require-scheme="Bearer" require-signed-tokens="true">
            <openid-config url=https://login.partner.microsoftonline.cn/xxxx-xxxx-xxxx-xxxx-xxxx/v2.0/.well-known/openid-configuration />
            <audiences>
                <audience>xxxx-xxxx-xxxx-xxxx-xxxx</audience>
            </audiences>
        </validate-jwt>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
        <choose>
            <when condition="@(context.LastError.Source == "validate-jwt")">
                <return-response>
                    <set-status code="302" reason="Unauthorized" />
                    <set-header name="Location" exists-action="override">
                        <value>https://login.partner.microsoftonline.cn/xxxx-xxxx-xxxx-xxxx-xxxx/oauth2/v2.0/authorize?response_type=code+id_token&redirect_uri=<redirect_uri>&client_id=%20xxxx-xxxx-xxxx-xxxx-xxxx&scope=openid+profile+email&response_mode=form_post&nonce=eef3d47c873242ddb09b28ed1f997f1b_20230926163347&state=redir%3D%252F</value>
                    </set-header>
                </return-response>
            </when>
        </choose>
    </on-error>
</policies>

 

 

 

参考资料

validate-jwt :https://learn.microsoft.com/en-us/azure/api-management/validate-jwt-policy

Set variable : https://learn.microsoft.com/en-us/azure/api-management/set-variable-policy#example


 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

标签:cookie,xxxx,require,token,头中,Cookie,APIM,Select
From: https://blog.51cto.com/u_13773780/9089977

相关文章

  • 【Azure APIM】在APIM中实现JWT验证不通过时跳转到Azure登录页面
    问题描述在APIM中配置JWT策略,验证JWT,如果认证失败,则跳转到AzureEntraID的Login页面。 问题解答要实现JWT验证失败后,跳转到AzureEntraID的Login页面。需要使用到两种策略:validate-jwt:https://learn.microsoft.com/en-us/azure/api-management/validate-jwt-policyretu......
  • 22.Web自动化测试之Cookie登录
    cookie是什么 Cookie是一些认证数据信息,存储在电脑的浏览器上当web服务器向浏览器发送web页面时,在连接关闭后,服务端不会记录用户的信息为什么要使用Cookie自动化登录 复用浏览器仍然在每次用例开始都需要人为介入若用例需要经常执行,复用浏览器则不是一......
  • 如何保障Cookie的信息安全
    一、支持策略保障Cookie的安全性可以从以下几个方面进行:1.1使用HttpOnly属性设置HttpOnly属性可以防止JavaScriptDocument.cookieAPI无法访问带有HttpOnly属性的cookie;此类Cookie仅作用于服务器。例如,持久化服务器端会话的Cookie不需要对JavaScript可用,而应......
  • ASP.NET Core 授权一(简单的Cookie)
    Cookie1.HTTP无连接无状态,Cookie和Session就是解决此问题。2.客户端向服务器端发送一个请求的时,服务端向客户端发送一个Cookie然后浏览器将Cookie保存,之后每次HTTP请求浏览器都会将Cookie发送给服务器端,需要衡量把什么数据放到cookie中,很多数据并不是每次请求都需要发给服务端,......
  • Java登陆第三十天——Cookie和Session
    会话会话就是客户端与服务器的一次交互。HTTP是一种无状态协议无状态:服务端不会记录客户端信息。有的时候,我们需要保存客户端的信息。对于登陆功能来说,保存客户端信息,可以避免客户端每访问都需要登陆一次至此,会话管理诞生。CookieCookie是一种客户端会话技术,并保存在......
  • js-cookie js-cookie的使用
    js-cookie是什么?js-cookie是一个简单的,轻量级的处理cookies的jsAPI,用来处理cookie相关的插件js-cookie的使用方法一、先下载npminstall--savejs-cookie**二、引入安装好js-cookie插件后,在我们需要处理cookie的地方,简单的通过import引入就可以使用了importCookiesfrom'js-co......
  • Halcon (基于镜头中心)协同机械手进行自动标定
    流程使用相机捕捉初始标定点位,记录世界坐标在机器人示教器上基于基准点位进行其余8个点位设置,每次x轴偏移+4或Y轴偏移+4对每个点位进行图像获取编写Halcon脚本,获取9幅图像中点位中心的像素坐标,以及对应算出的机械手世界坐标,导入标定demo获取换算关系。在图像中模拟位置进行验证,此......
  • cookie的一些知识点总结
    一、cookie的种类sessionID这个ID是会话性的,只要关闭了当前浏览器,这个ID会消失,需要调用getSessoin重新获取一个新的session会话性cookie这个cookie也是会话性的即使性cookie这个cookie只要离开的该请求或者是页面,就会消失持久性cookie这个cookie只要时间没有过期,就会存储......
  • python requests cookie格式转换
    importrequests#1.查看cookie#2.对比cookie#cookies=[{'domain':'.mingrisoft.com',#'httpOnly':False,#'name':'PHPSESSID',#'path':'/',#......
  • Cookie 和 session 的区别
    Cookie和session的区别参考回答:HTTP是一个无状态协议,因此Cookie的最大的作用就是存储sessionId用来唯一标识用户。一句话概括RESTFUL参考回答:就是用URL定位资源,用HTTP描述操作。讲讲viewport和移动端布局参考回答:可以参考这篇文章:响应式布局的常用......