在使用AddMicrosoftIdentityWebApp与IdentityServer4相结合时有成功的案例吗?

5

我正在尝试将Microsoft配置为Identityserver4的外部登录提供程序。

我已成功使用AddMicrosoftAccount按照identity server文档进行配置。

services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
 {
  microsoftOptions.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
  microsoftOptions.ClientId = configuration["MicrosoftLoginProvider:ClientId"];
  microsoftOptions.ClientSecret = configuration["MicrosoftLoginProvider:ClientSecret"];
 });

然而,我尝试实现单点登录并没有成功。文档和微软的文档一致,链接为:https://learn.microsoft.com/en-us/aspnet/core/security/authentication/social/microsoft-logins?view=aspnetcore-5.0

但是,如果你按照在Microsoft Developer Portal (portal.azure.com)中创建应用程序的说明操作,该门户网站上的示例代码将提供另一种不同的方法。门户网站为我生成的示例应用程序(WebApp-OpenIDConnect-DotNet)使用了AddMicrosoftIdentityWebApp

 services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));

由于这个应用程序可以直接使用单点登出,我想知道是否需要继续使用这种方法。

然而令我惊讶的是,我找不到任何有关如何将此方法集成到IdentityServer4中的文档/博客。尽管我几乎自己将其搞定了,但还存在一些奇怪的问题。

有人能否澄清一下,使用AddMicrosoftIdentityWebApp是将Microsoft作为外部身份提供者添加到IdentityServer4中的正确方法吗?有人成功地将AddMicrosoftIdentityWebApp与IdentityServer4一起使用了吗?

谢谢您的帮助!

2个回答

4

我成功找到了解决方法。

实际上,我只需要做两件事情。

第一,我需要在调用 Microsoft 生成的示例代码中的 AddAuthentication 中删除 OpenIdConnectDefaults.AuthenticationScheme。因此,代码变成了:

  services.AddAuthentication()
     .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));

然后,在从临时 cookie 读取外部身份验证的代码中,我必须使用 CookieAuthenticationDefaults.AuthenticationScheme。因此,该代码现在如下所示:

var authenticationResult = await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);

那就这些了。

3
在查找后,我发现这个声明在这里
Microsoft.Identity.Web是一种更简单的方式,在ASP.NET Core web应用程序和web API中使用Azure AD。
它不以任何方式替换ASP.NET Identity,也不替换AddJwtBearer或AddCookie或任何较低级别的基元,但它确实正确地使用和配置了它们以适应Azure AD。
它无法与非Azure身份提供者一起使用。它替换了在.NET 5.0中已过时的AzureAD.UI和AzureADB2C.UI。
因此,结论是Microsoft.Identity.Web不能在Azure AD之外工作,因此不能与IdentityServer一起使用。
如果您确实使其正常工作,请告诉我!

1
谢谢@Tore。不过,我对你的结论有些疑问。从你引用页面上的语句“它无法与非Azure身份提供者一起使用。”,我理解为您不能将该包用于例如Google之类的身份验证。但这并不意味着无法在IdentityServer4中将Azure AD配置为外部身份提供者,对吗? - Merijn
怀疑它对IdentityServer <-> Azure AD通信产生影响/帮助不大,因为与其在客户端应用程序中解决的逻辑相比,这种通信已经非常成熟和“容易”了。 - Tore Nestenius
实际上,只需进行一些更改(请参见下面的答案),它就能像魔法般运行。现在甚至注销也终于按照我想要的方式工作了。再次感谢您的帮助。 - Merijn
嗨@ToreNestenius,如果我想在.NetCore 5中使用方法“AddMicrosoftIdentityWebApp”,该怎么办?我正在使用.NetCore5 + React项目,并希望连接到AD B2C。 - Md Aslam
抱歉,我没有使用过AddMicrosoftIdentityWebApp库。 - Tore Nestenius
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接