我正在将 ASP.NET Core 5 Web API 安全性从隐式升级为授权代码。身份验证是使用 Azure A/D 完成的,我还需要允许使用 Swagger 文档。
我已经设法使它工作,但 client_secret 在我的情况下毫无用处,我想知道我是否做错了什么。我的配置如下:
天蓝色模数转换器
- 重定向 URI:https://localhost:44444/swagger/oauth2-redirect.html
- API 权限:Microsoft Graph + 自定义角色(
access_as_user
)
- 令牌:访问令牌和 ID 令牌未选中
应用程序设置.json
"AzureAd": {
"Instance": "https://login.microsoftonline.com",
"ClientId": "xxxxxxxx-xxxxxxxxx",
"TenantId": "xxxxxxxx-xxxxxxxxx"
},
启动.cs
services.AddMicrosoftIdentityWebApiAuthentication(Configuration);
private static void AddSwagger(IServiceCollection services, AzureAdAuthOptions auth)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Foo API", Version = "v1", });
AddSwaggerDocs_IncludeXmlComments(c);
c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme()
{
Type = SecuritySchemeType.OAuth2,
Flows = new OpenApiOAuthFlows()
{
AuthorizationCode = new OpenApiOAuthFlow()
{
AuthorizationUrl = new Uri($"{auth.Instance}/{auth.TenantId}/oauth2/v2.0/authorize"),
TokenUrl = new Uri($"{auth.Instance}/{auth.TenantId}/oauth2/v2.0/token"),
Scopes = { { $"api://{auth.ClientId}/access_as_user", "Access as user" } }
}
}
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "oauth2"
}
},
new string[] { }
}
});
});
}
Swagger
- oauth2(OAuth2,授权代码)
- 应用程序:Foo - Swagger
- 授权网址:https://login.microsoftonline.com/ https://login.microsoftonline.com//oauth2/v2.0/授权
- 令牌网址:https://login.microsoftonline.com/ https://login.microsoftonline.com//oauth2/v2.0/令牌
- client_id: 已填写
- 客户端秘密
范围:只有一个,api://<guid>/access_as_user
如果我在没有秘密的情况下授权,它就会正常工作。但是,如果我提供秘密,我会收到以下错误:
Auth ErrorError:未经授权,错误:invalid_client,描述:
AADSTS700025:客户端是公开的,因此“client_assertion”和
应提供“client_secret”。跟踪 ID:
dbb64172-2bbb-4392-8fc5-0ee71ab9c301 相关 ID:
8c7edd8b-b6d0-435b-abeb-158b3278c3fe 时间戳: 2021-05-27 07:21:14Z
我认为需要这个秘密才能使身份验证过程更加安全,但我似乎无法使用它。我究竟做错了什么?
双重检查并allowPublicClient
是假的。我已从 SPA 切换到 Web 客户端,并提供了密码,但收到以下错误:
Auth ErrorError:错误请求,错误:invalid_request,描述:
AADSTS9002326:仅允许跨域令牌兑换
“单页应用程序”客户端类型。跟踪 ID:
6e11093f-319b-4d75-92b9-c6a39775a501 相关 ID:
afcd9152-ccd5-4588-ae75-0b829272d66d 时间戳: 2021-05-28 06:10:58Z
所以,在使用 Swagger UI 时,我似乎陷入了 SPA 客户端的困境。