我创建了一个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登录,并以管理员身份卷回应用程序.