APIM 是否将相同的不记名令牌转发到后端 API? | OAuth 2.0 和 Azure AAD

问题描述 投票:0回答:2

按照 Microsoft 提供的以下文档,我已经注册了这两个应用程序,使用客户端凭据设置 OAuth 2.0 服务并添加了“validate-jwt”入站策略。我已经使用生成不记名令牌的邮递员对其进行了测试,并在使用令牌传递的 APIM 实例下调用了我的后端 API。它工作正常。

https://learn.microsoft.com/en-us/azure/api-management/api-management-howto-protect-backend-with-aad

但与 Apim 一起,我也想保护我的后端 API 并将相同的令牌传递给后端 API。所以我在这里有一些问题-

  • APIM 是否自动将相同的承载令牌转发到后端 API,或者我们是否需要为其配置任何策略?
  • 如果是,我如何查看跟踪日志?另外,我如何在后端 API 代码中授权相同的令牌?

这是我的“validate-jwt”政策-

<inbound>
    <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
        <openid-config url="https://login.microsoftonline.com/{AAD Tenant ID}/v2.0/.well-known/openid-configuration" />
        <audiences>
            <audience>{App Id of backend App}</audience>
        </audiences>
    </validate-jwt>
    <base />
</inbound>

请帮忙

azure oauth-2.0 azure-active-directory azure-api-management apim
2个回答
1
投票

第一个问题:

根据我这边的一些测试,APIM 似乎可以自动将相同的 bearer token 转发到后端 api,而无需添加任何策略。

我在 APIM 中创建了一个 api,用于在后端调用 Microsoft graph api(列出用户)。测试运行 APIM api,它显示“401 Unauthorized”错误。然后我测试在 APIM api 的标头中提供不记名令牌,如下图所示:

运行成功并响应用户列表。因此,不记名令牌可以自动转发到后端 api。

第二个问题:

如果你想跟踪后端 api 的日志,我认为你可以在你的 api 的后端代码中进行。

要验证后端api中的令牌,您可以在后端api代码中解码jwt令牌,然后检查令牌中claim的值(下面我提供了一个示例来解码jwt令牌并获取

iss
claim的值)

using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp5
{
    class Program
    {
        static void Main(string[] args)
        {
            var stream = "your access token";
            var handler = new JwtSecurityTokenHandler();
            var jsonToken = handler.ReadToken(stream);
            var tokenS = handler.ReadToken(stream) as JwtSecurityToken;

            var iss = tokenS.Claims.First(claim => claim.Type == "iss").Value;
            Console.WriteLine(iss);
            //Then check if "iss" matches the value you specified.

            Console.ReadLine();
        }
    }
}


0
投票

第一个截图显示它可以手动完成。问题大概是它是否可以自动完成,但答案没有显示。 ChatGPT 说不能配置,只能用策略来做

© www.soinside.com 2019 - 2024. All rights reserved.