我尝试使用客户端凭据流登录openapi。我做不到。OpenApi返回此错误。我也试过了,结果是一样的。我不知道该怎么办,我也找不到什么办法。感谢您的帮助
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
1条答案
按热度按时间eimct9ow1#
我注册了一个Azure AD应用程序,并公开了一个具有范围的API,如下所示:
当我尝试使用客户端凭据流进行授权时,我也得到了相同的错误,浏览器控制台中的令牌端点的CORS问题如下:
正如 @juunas 在此SO thread中所建议的那样,您不能使用来自前端的客户端凭据流,因为Azure AD阻止跨源请求到其令牌端点。
若要解决错误,需要切换到委托认证流,如隐式流或授权码流等涉及用户交互的认证流。
在我的例子中,我通过在Azure AD应用程序中启用以下选项来使用隐式流:
现在,我修改了代码,将客户端凭据替换为与隐式流相关的参数,如下所示:
当我点击授权选项时,它要求我选择一个Azure AD帐户,并在成功身份验证后显示在屏幕下方:
我这样调用API请求得到响应成功:
参考:Enable OAuth 2 Authorization Using Azure AD And Swagger In .Net by Jay Krishna Reddy