Bearer error="invalid_token" Signature Invalid after Authorized with Swagger via MSAL Microsoft Azure

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

我正在尝试通过 MSAL 进行身份验证后调用天气预报端点。 (使用 Microsoft Identity 在 Swagger 中启用用户身份验证)

根据这篇文章。

https://www.josephguadagno.net/2022/06/03/enabling-user-authentication-in-swagger-using-microsoft-identity

我已经使用 VS2022 创建了一个默认的身份链接 API。我已经在 Azure 上配置了我的客户端。 我的代码的区别如下

 s.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
    Type = SecuritySchemeType.OAuth2,
    Flows = new OpenApiOAuthFlows
    {
        Implicit = new OpenApiOAuthFlow()
        {
            AuthorizationUrl = new Uri("https://login.microsoftonline.com/common/oauth2/v2.0/authorize"),
            TokenUrl = new Uri("https://login.microsoftonline.com/common/common/v2.0/token"),
            Scopes = new Dictionary<string, string>() { 
                { "user.read", "Access App Graph" },
                { "api://29867508-2243-4ae2-9e04-c740dfe793a2/access_as_user","Access my Api stuff on my Client"}
            }
        }
    }
});

我设法通过 Microsoft Api 进行授权,并且大摇大摆地说我已获得授权。 但是当我尝试调用天气预报 api 时 - 我仍然收到 401。

任何帮助都会很棒。我不知道接下来要尝试什么。

编辑。我试图删除 MS Graph (user.read) 的范围并为我的客户端调用 API,我收到 403 错误。

但是api肯定是有的

我期待在调用天气预报端点时看到数据和返回 200。

authentication .net-core azure-active-directory swagger msal
2个回答
1
投票

我相信解码后的令牌可以解释错误消息,令牌有

"scp": "User.Read profile openid email"
而您的api的正确范围应该是
"scp": "api://29867508-2243-4ae2-9e04-c740dfe793a2/access_as_user"
.

原因是,你同时设置了graph api权限(User.Read)和你的自定义api权限。他们有不同的受众,因此令牌只能为其中一种 api 权限生成。恐怕如果你像下面这样写就可以了(只需调整顺序,因为当有两种 api 权限时,它会为第一种 api 权限生成令牌)。

Scopes = new Dictionary<string, string>() { 
{ "api://29867508-2243-4ae2-9e04-c740dfe793a2/access_as_user","Access my Api stuff on my Client"}
{ "user.read", "Access App Graph" },
            },

顺便说一句,我很久以前有一个测试有同样的要求。


0
投票

我使用了 Tiny Wang 的链接 (c-sharpcorner.com/article/…)

我重新创建了项目。

我看到我没有在我的服务器上绘制图表的管理员权限,所以这就是我也遇到问题的原因。非常感谢!

我还必须在权限上授予对我自己的 Api 的访问权限。 Settings

感谢大家的帮助

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