我正在尝试在通过MSAL进行身份验证后调用天气预报终结点。(使用Microsoft标识在Swagger中启用用户身份验证)
根据本条。
https://www.josephguadagno.net/2022/06/03/enabling-user-authentication-in-swagger-using-microsoft-identity
我已经使用VS 2022创建了一个默认的身份链接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"}
}
}
}
});
我设法通过微软API授权,swagger说我被授权了。但是当我试图调用天气预报api时-我仍然得到401。
任何帮助都将是惊人的。我不知道下一步该尝试什么。
编辑。我试图删除MS Graph(useriderread)的作用域,只是为我的客户端调用API,我得到了403错误。
但是API肯定在那里
我希望在调用天气预报端点时看到数据和返回的200。
1条答案
按热度按时间fkvaft9z1#
我相信解码的令牌可以解释错误消息,令牌有
"scp": "User.Read profile openid email"
,而您的API的正确范围应该是"scp": "api://29867508-2243-4ae2-9e04-c740dfe793a2/access_as_user"
。原因是,您同时设置了图形API权限(用户.读取)和自定义api权限。他们有不同的受众,所以令牌只能为其中一个api权限生成。我担心如果您像下面这样写将工作(只是调整顺序,因为当有2种api权限时,它将为第一种api权限生成令牌)。
顺便说一下,我很久以前就有同样的要求。