swagger OpenApi -无法使用Azure广告客户端凭据

zed5wv10  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(107)

我尝试使用客户端凭据流登录openapi。我做不到。OpenApi返回此错误。我也试过了,结果是一样的。我不知道该怎么办,我也找不到什么办法。
感谢您的帮助

eimct9ow

eimct9ow1#

我注册了一个Azure AD应用程序,并公开了一个具有范围的API,如下所示:

当我尝试使用客户端凭据流进行授权时,我也得到了相同的错误,浏览器控制台中的令牌端点的CORS问题如下:

正如 @juunas 在此SO thread中所建议的那样,您不能使用来自前端的客户端凭据流,因为Azure AD阻止跨源请求到其令牌端点
若要解决错误,需要切换到委托认证流,如隐式流或授权码流等涉及用户交互的认证流。
在我的例子中,我通过在Azure AD应用程序中启用以下选项来使用隐式流

现在,我修改了代码,将客户端凭据替换为与隐式流相关的参数,如下所示:

c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
    Type = SecuritySchemeType.OAuth2,
    Flows = new OpenApiOAuthFlows()
    {
        Implicit = new OpenApiOAuthFlow()
        {
            AuthorizationUrl = new Uri("https://login.microsoftonline.com/tenantId/oauth2/v2.0/authorize"),
            TokenUrl = new Uri("https://login.microsoftonline.com/tenantId/oauth2/v2.0/token"),
            Scopes = new Dictionary<string, string>
            {
                { "api://appId/ReadAccess", "" }
            }
        }
    },
});

当我点击授权选项时,它要求我选择一个Azure AD帐户,并在成功身份验证后显示在屏幕下方:

我这样调用API请求得到响应成功:

GET https://localhost:xxxx/WeatherForecast

参考:Enable OAuth 2 Authorization Using Azure AD And Swagger In .Net by Jay Krishna Reddy

相关问题