tôi quản lý để thực hiện điều này bằng cách làm như sau:
Đầu tiên, thêm một tham chiếu đến các gói Microsoft.Owin.Security.OpenIdConnect
NuGet.
Second, cấu hình nó trong Startup.Auth.cs
tôi:
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"
}
});
Thứ ba, tôi thiết lập các ứng dụng trong Cổng Azure (cổ điển):
Thứ tư, Tôi đã thêm một trang đăng nhập riêng cho người dùng quản trị:
@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>
}
Fifth, hành động ExternalLogin
không cần phải thay đổi - chúng tôi chỉ để cho OWIN middleware chuyển hướng chúng ta đến trang đăng nhập bên ngoài. Luồng sau đó sẽ hướng người dùng quay trở lại hành động ExternalLoginCallback
.
Cuối cùng, trong hành động ExternalLoginCallback
, tôi kiểm tra những tuyên bố đến để xác định rằng đăng nhập đã qua Azure AD, và thay vì gọi vào ASP.NET Identity, tôi xây dựng riêng ClaimsIdentity
của tôi, trong đó có tất cả của tôi (ứng dụng cụ thể) thông tin xác nhận quyền sở hữu mà ứng dụng của tôi nhận ra là người dùng quản trị viên.
Bây giờ, người dùng quản trị điều hướng đến https://example.com/admin
, nhấp vào nút đăng nhập, được chuyển hướng đến đăng nhập Azure AD và quay lại ứng dụng với tư cách người dùng quản trị viên.
Có, tôi đã xem nhanh điều đó. Tôi đã thực sự cố gắng tránh điều này - trải nghiệm người dùng không thực sự phù hợp với những gì tôi muốn đạt được. –
Bạn có thể có khả năng cuộn đòn bẩy của riêng bạn như Thinktecture's Identity Server (http://thinktecture.github.io/Thinktecture.IdentityServer.v2/). Nhược điểm là không còn là một dịch vụ lưu trữ và bạn cần phải nuôi dưỡng và duy trì máy chủ hoạt động như trình xử lý xác thực của bạn. –