身份服务器 4 和 Azure AD

Identityserver 4 and Azure AD

我正在考虑在基于 C# 的 MVC 应用程序中使用 Identity Server 4 进行身份验证。我想使用存储在 Azure AD 中的帐户作为有效用户的来源,但文档似乎只提到了 Google 和 OpenID,并且只是顺便提到了 Azure。

有人知道关于如何在 Identity Server 4 中使用 Azure AD 的任何好的文档 and/or 教程吗?

您可以使用从 IdentityServer 登录到 Azure AD,就像从例如从 IdentityServer 使用登录到 IdentityServer 一样。 Javascript 或 MVC 应用程序。

我最近这样做了,您需要做的就是像这样向 Azure Ad 注册 OpenIdConnect 选项:

public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions());

    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            ClientId = clientId,
            Authority = authority,
            PostLogoutRedirectUri = postLogoutRedirectUri,
        });
}

这里有更多信息:https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devquickstarts-webapp-dotnet

然后您应该在登录操作中调用 ChallengeAsync 方法:

var authenticationProperties = new AuthenticationProperties { RedirectUri = "your redirect uri" };
await HttpContext.Authentication.ChallengeAsync(your policy, authenticationProperties);

然后提供回调方法作为 GET 方法,然后按照 IdentityServer 示例中提供的外部登录示例进行操作:https://github.com/IdentityServer/IdentityServer4.Samples/blob/dev/Quickstarts/4_ImplicitFlowAuthenticationWithExternal/src/QuickstartIdentityServer/Quickstart/Account/AccountController.cs

有一个sample with Azure AD on github , forked from External Login sample provided in IdentityServer samples

该样本还修复了一个已知问题"State parameter generated by middleware is too large for Azure AD #978"

IdentityServer4 具有“Sign-in 与外部身份提供商”的文档

http://docs.identityserver.io/en/latest/topics/signin_external_providers.html#state-url-length-and-isecuredataformat

不幸的是它不完整,但这是我所做的:

Startup.cs 对于 .NET 5,Program.cs 对于 .NET 6:

services.AddAuthentication()
      .AddOpenIdConnect("aad", "Azure AD", options =>
            {
                options.ClientSecret = "<ClientSecret>";
                options.ResponseType = OpenIdConnectResponseType.Code;
                options.ClientId ="<ClientId>";
                options.Authority = "https://login.microsoftonline.com/<TenantId>/";
                options.CallbackPath = "/signin-oidc";
            })
        .AddIdentityServerJwt();

然后您将在“使用其他服务登录”下看到一个外部登录。:

完成登录后,您应该会看到此消息。

点击 Register 后默认设置卡住了。这是由于新电子邮件未得到确认。这可以通过设置 SignIn.RequireConfirmedAccount = false

来解决
services.AddDefaultIdentity<ApplicationUser>(options => 
    options.SignIn.RequireConfirmedAccount = true)

对于新用户,您还可以使用“重新发送电子邮件确认”或在 [dbo].[AspNetUsers] 中将 EmailConfirmed 设置为 true。

Azure 广告设置。您还需要在 Certificates & secrets.

下添加客户端密码