加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

认证 – 支持个人用户帐户和组织帐户在MVC5 / ASP.Net身份2

发布时间:2020-12-15 22:46:13 所属栏目:asp.Net 来源:网络整理
导读:我创建了一个ASP.Net MVC5应用程序,我已经通过Google,Facebook等配置(并且工作正常)个人用户帐户. 我想做的还是支持对Azure Active Directory(组织帐户)的身份验证.这将是内部员工能够以管理员身份登录到应用程序. 我发现的所有现有信息/指南/文档通常涉及使
我创建了一个ASP.Net MVC5应用程序,我已经通过Google,Facebook等配置(并且工作正常)个人用户帐户.

我想做的还是支持对Azure Active Directory(组织帐户)的身份验证.这将是内部员工能够以管理员身份登录到应用程序.

我发现的所有现有信息/指南/文档通常涉及使用一个或另一个.我们如何一起启用它们?

如果需要为每种类型的用户单独登录表单,这将不是一个问题.

编辑:

我在Azure Active Directory门户中查看应用程序配置,并注意到它们定义了“OAUTH 2.0授权端点”.可以在Startup.Auth.cs中配置MVC5来使用吗?

解决方法

我设法通过执行以下操作来实现:

首先,添加对Microsoft.Owin.Security.OpenIdConnect Nuget包的引用.

其次,在我的Startup.Auth.cs中进行配置:

app.USEOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
    ClientId = "From the Azure Portal (see below)",Authority = "https://login.windows.net/<domain>.onmicrosoft.com",Notifications = new OpenIdConnectAuthenticationNotifications
    {
        RedirectToIdentityProvider = (ctx) =>
        {
            if (ctx.Request.Path.Value.EndsWith("ExternalLogin"))
            {
                string appBasePathUrl = ctx.Request.Scheme + "://" + ctx.Request.Host + ctx.Request.PathBase;
                ctx.ProtocolMessage.RedirectUri = appBasePathUrl + "/";
                ctx.ProtocolMessage.PostLogoutRedirectUri = appBasePathUrl;
            }
            else
            {
                ctx.State = NotificationResultState.Skipped;
                ctx.HandleResponse();
            }

            return Task.FromResult(0);
        }
    },Description = new AuthenticationDescription
    {
        AuthenticationType = "OpenIdConnect",Caption = "SomeNameHere"
    }
});

第三,我在Azure Portal(经典版)中设置了应用程序:

第四,我为管理员添加了一个单独的登录页面:

@using (Html.BeginForm("ExternalLogin","Home"))
{
    @Html.AntiForgeryToken()
    <div class="ui basic segment">
        <div class="ui list">
            <div class="item">
                <button type="submit" name="provider" value="OpenIdConnect" class="left floated huge ui button social">
                    <i class="windows icon"></i>
                    <span>My Org Name</span>
                </button>
            </div>
        </div>
    </div>
}

第五,ExternalLogin操作不需要改变 – 我们只是让OWIN中间件将我们重定向到外部登录页面.然后,流程将引导用户返回到ExternalLoginCallback操作.

最后,在ExternalLoginCallback操作中,我检查传入的声明以确定登录是通过Azure AD,而不是调用ASP.NET身份,我构建了我自己的ClaimsIdentity,它具有我所有的(应用程序特定的)声明信息,我的应用程序被认定为管理员用户.

现在,管理员用户导航到https://example.com/admin,单击登录按钮,将其重定向到Azure AD登录,并以管理员身份卷回应用程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读