1

我正在从 APIM 记录各种上下文属性。可以从上下文变量记录的一类属性是“Jwt”,具有算法、受众、声明等属性。但是,当我尝试从策略记录这些属性时,APIM 返回以下错误:

“IProxyRequestContext”不包含“Jwt”的定义

我假设这是因为没有为我的特定测试实例配置 Jwt。有没有办法让我的日志记录以此为条件?就像是?:

如果上下文中存在 Jwt,则记录 Jwt.Algorithm

虽然没有为我的本地环境配置 Jwt,但我认为它可能是为生产环境配置的,我的公司会对捕获这些信息感兴趣。

4

3 回答 3

1

可以选择解析 Jwt 并获取算法使用

Jwt AsJwt(input: this string)

这将返回 Jwt 对象,其中包含以下值。

Algorithm: string

Audience: IEnumerable<string>

Claims: IReadOnlyDictionary<string, string[]>

ExpirationTime: DateTime?

Id: string

Issuer: string

NotBefore: DateTime?

Subject: string

Type: string

请在下面找到链接以了解更多详细信息 https://docs.microsoft.com/en-us/azure/api-management/api-management-policy-expressions

于 2018-01-18T09:56:09.557 回答
0

上下文中没有 Jwt 属性。但是,有 AsJwt/TryParseJwt 方法可以将字符串转换为 Jwt 对象,该对象确实具有您提到的属性(算法等)。因此,如果请求/响应的某些部分包含表示 jwt 的字符串,您可以在策略表达式中执行以下操作:

JsonConvert.SerializeObject(context.Request.Url.Query["jwt"][0])

于 2016-02-10T03:23:20.507 回答
0

编码的 jwt 将位于请求的 Authorization 标头中。AsJwt 可以将该标记解析为 Jwt 对象。(搜索上下文变量 jwt

您的通话将如下所示:

context.Request.Headers.GetValueOrDefault("Authorization","").AsJwt()

访问 Jwt 对象的属性将如下所示:

context.Request.Headers.GetValueOrDefault("Authorization","").AsJwt()?.Algorithm

于 2019-03-07T17:08:25.583 回答