gpt4 book ai didi

Azure API 网关 - 将 JWT token 发送到后端

转载 作者:行者123 更新时间:2023-12-03 04:45:36 24 4
gpt4 key购买 nike

通过 Azure API 网关和外部 IdP (Okta),我们设置了一个简单且有效的设置。API网关能够对JWT token 进行身份验证和授权并调用后端服务(App Logic或Azure函数)。

除了调用后端服务之外,API 网关还可以传递来自 JWT token 的声明

    <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="No JWT token" require-expiration-time="true" require-scheme="Bearer" require-signed-tokens="true" clock-skew="10" output-token-variable-name="jwttoken">

<set-header name="jwt-token" exists-action="append">
<value><![CDATA[@(context.Variables.ContainsKey("jwttoken") ? (((Jwt)(context.Variables["jwttoken"])).Subject) : "") ]]></value>
</set-header>

后端服务 (AppLogic) 使用其 SAS token 进行授权,因此我们必须删除授权 header 。我正在考虑将 JWT token 发送到后端,但到目前为止我发现没有办法这样做(序列化 jwttoken 变量,API GW 不允许调用 .ToString() 方法)。

问:有/如何将原始 JWT token 发送到后端(在另一个 header 中?)

最佳答案

Jwt.TryParse 可用于分解 JWT token 并以明文形式传递到另一个 header :

<policies>
<inbound>
<base />
<set-header name="parsed-token" exists-action="override">
<value>@{
string parsedToken = "error";
string tokenHeader = context.Request.Headers.GetValueOrDefault("jwt-token", "");
if (tokenHeader?.Length > 0)
{
Jwt jwt;
if (tokenHeader.TryParseJwt(out jwt))
{
foreach(var claim in jwt.Claims)
{
parsedToken += claim.Key + ":" + string.Join("-",claim.Value) + ";";
}
}
}
return parsedToken;
}</value>
</set-header>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>

对于来自 https://jwt.io/#debugger-io 的示例 token ,这将为您提供如下 header :

"jwt-token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"parsed-token": "errorsub:1234567890;name:John Doe;iat:1516239022;",

I still cannot find proper documentation for class Jwt used in Azure API policy expressions - this class does not seem to have a ToString().

关于Azure API 网关 - 将 JWT token 发送到后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64392067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com