将 AddMicrosoftIdentityWebApp 与 IdentityServer4 结合使用是否顺利?

问题描述 投票:0回答:3

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

AddMicrosoftAccount
:

遵循身份服务器的文档成功了
services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
 {
  microsoftOptions.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
  microsoftOptions.ClientId = configuration["MicrosoftLoginProvider:ClientId"];
  microsoftOptions.ClientSecret = configuration["MicrosoftLoginProvider:ClientSecret"];
 });

但是,我没有运气让单点退出工作。该文档与 Microsoft 的文档一致,网址为 https://learn.microsoft.com/en-us/aspnet/core/security/authentication/social/microsoft-logins?view=aspnetcore-5.0

但是,如果您按照 Microsoft 开发人员门户 (portal.azure.com) 中的说明创建应用程序,该门户上的示例代码会建议采用不同的方式。门户为我生成的示例应用程序 (WebApp-OpenIDConnect-DotNet) 正在使用

AddMicrosoftIdentityWebApp
:

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

由于此应用程序是开箱即用的,包括单点退出,我想知道这是否是我必须继续的方式。

然而,令我惊讶的是,我找不到任何有关如何在 IdentityServer4 中集成此方法的文档/博客。我自己几乎可以正常工作了,但是有一些奇怪的问题。

有人可以澄清一下使用

AddMicrosoftIdentityWebApp
是否是将 Microsoft 添加为 Identityserver4 的外部身份提供商的方法吗? 有人成功让
AddMicrosoftIdentityWebApp
与 IdentityServer4 一起使用吗?

感谢您的帮助!

asp.net-core azure-active-directory identityserver4 openid-connect
3个回答
4
投票

我想出了如何让它发挥作用。

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

首先,我必须在 Microsoft 生成的示例代码中删除对

OpenIdConnectDefaults.AuthenticationScheme
的调用中的
AddAuthentication
。所以代码就变成了:

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

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

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

仅此而已。


3
投票

经过一番挖掘,我发现了这个说法here

Microsoft.Identity.Web 是在 ASP.NET Core Web 应用程序和 Web API 中使用 Azure AD 的更简单方法。

它不会以任何方式替换 ASP.NET Identity,它不会替换 AddJwtBearerAddCookie 或任何较低级别的原语,但它确实为 Azure AD 正确使用和配置它们。

它不适用于非 Azure 身份提供商。它取代了 .NET 5.0 中已过时的 AzureAD.UI 和 AzureADB2C.UI

因此,结论是 Microsoft.Identity.Web 无法在 Azure AD 之外运行,因此无法与 IdentityServer 一起运行。

如果你确实让它工作,请告诉我!


0
投票

默认情况下,Identity Server 的 Quickstart UI 捆绑包附带的

ExternalController
会读取名称为“adsrv.external”的身份验证 cookie

// read external identity from the temporary cookie
var result = await HttpContext.AuthenticateAsync(IdentityServerConstants.ExternalCookieAuthenticationScheme);

但是对于

AddMicrosoftIdentityWebApp
,默认 cookie 名称是“Cookie”。 OP 通过将
ExternalController
中的回调方法更改为
HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme)
的解决方法有效。但是,如果您已经有其他身份验证方案都使用
ExternalCookieAuthenticationScheme
作为登录方案,那么显然想法方法是使
AddMicrosoftIdentityWebApp
相同。

这可以通过在配置

SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme
时设置
MicrosoftIdentityOptinos
来完成。
cookieScheme
可选参数还需要明确设置为
null
或空字符串,否则它将注册自己的cookie处理程序而不是使用
ExternalCookieAuthenticationScheme

© www.soinside.com 2019 - 2024. All rights reserved.