我们正在为 .NET Core 3.1 api 使用带有 JWT 身份验证的 IdentityServer 4。这一切都很好。我正在尝试添加 NTLM 身份验证。
我安装了 IdentityServer 快速入门,并且能够获得“Windows”外部登录以在域上对我进行身份验证。我看到正在设置 cookie,并且看到我正在将 cookie 发送到 API 的请求中,但我总是得到 401。我不确定如何设置 API 以接受 cookie。我正在使用 Angular 应用程序调用 API,但我不确定这是否重要。所有帮助表示赞赏。
客户端配置:
new Client {
RequireConsent = false,
ClientId = "angular_spa",
ClientName = "Angular SPA",
AllowedGrantTypes = GrantTypes.Implicit,
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"externalapi"
},
RedirectUris = {"http://localhost:42001/angular/logout"},
PostLogoutRedirectUris = {"http://localhost:42001/"},
AllowedCorsOrigins = {"http://localhost:42001"},
AllowAccessTokensViaBrowser = true,
AccessTokenLifetime = 3600
},
身份服务器配置:
var builder = services.AddIdentityServer()
.AddInMemoryIdentityResources(keyConfig.Ids)
.AddInMemoryApiResources(keyConfig.Apis)
.AddInMemoryClients(keyConfig.Clients)
.AddCustomUserStore()
.AddInMemoryApiScopes(keyConfig.Scopes);
API 配置
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
options.Authority = Configuration.GetValue<string>("IdentityServerSettings:Authority");
options.ApiName = Configuration.GetValue<string>("IdentityServerSettings:ApiName");
options.ApiSecret = Configuration.GetValue<string>("IdentityServerSettings:ApiSecret");
});
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = "Cookies";
})
.AddCookie("Cookies");