问题描述
我有一个 Web API,目前支持开箱即用的 Windows 身份验证。在我的 Startup.cs
中,我只有:
services.AddAuthentication();
services.AddAuthorization();
和:
app.UseAuthentication();
app.UseAuthorization();
目前就这些。 Windows 和匿名身份验证均已启用,并且所有控制器都具有 [Authorize]
,除非需要匿名。大多数控制器都有 CRUD 操作,每个操作都有一个自定义过滤器,用于检查数据库是否允许用户执行操作。
此 API 提供 Winforms 桌面应用程序,用户使用其域帐户登录。所以目前我在每个请求上传递他们的网络凭据,以及一个额外的令牌,我用来与他们的数据库用户权限进行比较。
现在我需要添加额外的身份验证方案,从 OpenId 开始。我已经有第二个应用程序可以从身份验证服务器获取访问令牌。
我已经开始使用以下方法,但它不起作用:
services.AddAuthentication()
.AddNegotiate(IISDefaults.AuthenticationScheme,options =>
{
})
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme,options =>
{
options.Authority = Configuration["Issuer"];
options.ClientId = Configuration["ClientId"];
options.ClientSecret = Configuration["ClientSecret"];
options.TokenValidationParameters = new TokenValidationParameters {
ValidateIssuer = true,IssuerSigningKey = new SymmetricSecurityKey(Convert.FromBase64String(Configuration["EncryptionKey"]))
};
});
services.AddAuthorization(options =>
{
var builder = new AuthorizationPolicyBuilder(
IISDefaults.AuthenticationScheme,OpenIdConnectDefaults.AuthenticationScheme
);
builder.RequireAuthenticatedUser();
options.DefaultPolicy = builder.Build();
});
我错过了什么?
解决方法
您的默认身份验证架构在哪里?
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(o => ...