使用密码和Azure Active Directory身份验证的Asp.net标识

本文关键字:身份验证 Asp net 标识 Directory Active 密码 Azure | 更新日期: 2023-09-27 18:05:04

我正在构建一个ASP。Asp.net MVC 5网站使用Asp.net Identity (OWIN),并希望支持传统的用户名/密码身份验证以及针对Azure Active Directory的身份验证。这个应用程序不需要对微软id (Live id), Facebook, Twitter或任何其他外部提供商进行身份验证。我发现最接近SO的问题是这个:如何在ASP上同时进行Azure Active Directory单点登录和表单身份验证。净MVC

我看过当你在VS 2015中使用"个人用户帐户"选项以及"工作和学校帐户"选项创建项目时创建的示例。我的身份验证工作得很好;只有当我试图把它们结合起来时,我才会遇到问题。

在我的Startup_Auth.cs文件中,我这样配置OWIN:

    public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
        //app.UseCookieAuthentication(new CookieAuthenticationOptions { });
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
            LoginPath = new PathString("/account/sign-in")
        });
        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
                {
                    ValidateIssuer = false,
                },
                Notifications = new OpenIdConnectAuthenticationNotifications()
                {
                    SecurityTokenValidated = (context) => 
                    {
                        return Task.FromResult(0);
                    },
                    AuthorizationCodeReceived = (context) =>
                    {
                        return Task.FromResult(0);
                    },
                    AuthenticationFailed = (context) =>
                    {
                        context.OwinContext.Response.Redirect("/Home/Error");
                        context.HandleResponse(); // Suppress the exception
                        return Task.FromResult(0);
                    }
                }
            }
        );
    }  

此配置适用于密码身份验证,但不适用于AAD身份验证。要启用AAD身份验证,我需要注释掉设置AuthenticationType

的行
AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,

或者,只设置没有值的CookieAuthentication。

app.UseCookieAuthentication(new CookieAuthenticationOptions { });

我猜有一个相对简单的方法,我希望你能告诉我从哪里开始找

使用密码和Azure Active Directory身份验证的Asp.net标识

我搜索了微软的例子。它们看起来都像解。看这里:

  1. WebApp-WSFederation-DotNet
  2. WebApp-MultiTenant-OpenIdConnect-DotNet
  3. WebApp-OpenIDConnect-DotNet
另一个例子是WindowsAzureActiveDirectoryBearerAuthenticationOptions

最近ASP的Damian Edwards。. NET团队在github上开源了他们的社区站立网站。他们正在使用Azure AD,所以我希望它在正确的方向上有所帮助,不幸的是我没有Azure AD的任何经验。

这是youtube上的一段关于脱口秀的视频,我想这里有一些技巧和提示,你可以利用

我知道这是一个老问题。我潜在地希望做一些类似的事情,但可能更像ASP。Net身份认证到多个Azure AD租户。将Azure AD集成到ASP中。

…然后利用OnTokenValidated通知来实现您自己的发布者验证逻辑,这取决于您想要支持的租户(任何租户,Microsoft帐户+ Azure AD的特定列表,单个Azure AD,仅Microsoft帐户等)…

让我相信这里的示例代码可能包含了这个混合验证场景的关键。