本文介绍了如何在用于Core 2.0的IdentityServer4中启用Azure集成?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个基于IdentityServer4核心1.0的应用程序。它与Azure AD进行了有效的集成。然而,在将项目迁移到IdentityServer42.0.0-rc1之后,集成不再起作用。这与从.NET Core1.0到Core2.0的破坏性更改有关。我遵循https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x

的建议

我尝试将app.UseOpenIdConnectAuthentication调用更改为

services.AddAuthentication() .AddMicrosoftAccount(...)

或至

services.AddAuthentication() .AddOpenIdConnect(...)

但是,在此查询中,所有这些都只会生成空列表:_httpContextAccessor.HttpContext.Authentication.GetAuthenticationSchemes(),用于构建外部认证服务。

有人知道再次启用Azure AD集成的正确方式吗?

推荐答案

经过一番研究,我想通了。重要的是,您不应该再依赖过时的调用:_httpContextAccessor.HttpContext.Authentication.GetAuthenticationSchemes()。相反,您应该调用await _schemaProvider.GetAllSchemesAsync(),其中_schemaProvider是IAuthenticationSchemeProvider的注入接口。另一个更改是在Startup.cs ConfigureServices中,您应该像这样构建外部身份验证提供程序:

services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = "[custom name]" }) .AddCookie() .AddOpenIdConnect("[custom name]", options => { options.Authority = $"https://login.microsoftonline.com/[tenantid]"; options.ClientId = [client id]; });

注意:我将一个名称作为第一个参数传递给AddOpenIdConnect,它将为该实例提供一个定制方案名称。这有助于在登录页面上显示外部提供程序,因为我还没有弄清楚如何传递DisplayName。如果不进行此更改,它将显示‘OpenIdConnect’。如果我有许多AAD集成,我认为这太通用和混乱了。由于此方案更改,您还需要确保将选项.DefaultChallengeSolutions设置为您添加的方案名称。

这篇关于如何在用于Core 2.0的IdentityServer4中启用Azure集成?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-21 03:07