13

Tôi đã tạo ứng dụng ASP.Net MVC5, trong đó tôi đã định cấu hình (và có hoạt động tốt) Tài khoản người dùng cá nhân qua Google, Facebook, v.v.Hỗ trợ tài khoản người dùng cá nhân và tài khoản tổ chức trong MVC5/ASP.Net Identity 2

Điều tôi muốn làm là hỗ trợ xác thực đối với Azure Active Directory (Tài khoản tổ chức). Điều này sẽ cho nhân viên nội bộ có thể đăng nhập vào ứng dụng với tư cách là quản trị viên.

Tất cả thông tin/hướng dẫn/tài liệu hiện có mà tôi đã tìm thấy thường đề cập đến việc sử dụng cái này hoặc cái kia. Làm thế nào tôi có thể kích hoạt chúng với nhau?

Nếu cần có biểu mẫu đăng nhập riêng cho từng loại người dùng, điều đó sẽ không phải là vấn đề.

EDIT:

Tôi đã nhìn vào cấu hình ứng dụng trong Azure kích hoạt cổng Directory, và nhận thấy rằng họ xác định một "quyền của OAuth 2.0 Endpoint". MVC5 có thể được cấu hình trong phạm vi Startup.Auth.cs để sử dụng không?

Trả lời

4

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):

Azure Active Directory Application Configuration

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.

0

Đặt cược tốt nhất của bạn là sử dụng Dịch vụ kiểm soát truy cập AD Azue (ACS) và thiết lập Nhà cung cấp danh tính để bao gồm Azure AD, Facebook và cộng sự. Xem tài liệu ở đây: http://azure.microsoft.com/en-us/documentation/articles/active-directory-dotnet-how-to-use-access-control/

+0

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. –

+0

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. –

0

ACS thực sự có thể được sử dụng, tuy nhiên bạn đã thực hiện đăng nhập Google/Facebook tôi khuyên bạn nên tích hợp trực tiếp với Azure AD thay vì trải qua STS trung gian như ACS/thinktecture.

Nếu trải nghiệm đăng nhập của ứng dụng liên quan đến việc người dùng nhấp vào hình dán "Đăng nhập bằng Google/Đăng nhập bằng Facebook" - bạn có thể thêm tài khoản "Đăng nhập bằng tài khoản của công ty bạn". (thậm chí có cả kiểu đề xuất thương hiệu: http://msdn.microsoft.com/en-us/library/azure/dn132598.aspx Nếu ứng dụng của bạn thực hiện khám phá lĩnh vực và chuyển người dùng đến IdP thích hợp (sử dụng hộp văn bản có nội dung "Nhập địa chỉ email của bạn để đăng nhập") - thì bạn có thể thêm đối sánh cho địa chỉ email của công ty và chuyển tiếp những người dùng đó đến AAD.

Trong cả hai trường hợp, ứng dụng của bạn sẽ gửi yêu cầu SSO tới điểm cuối SSO của AAD: https://login.windows.net/ {tên miền/id công ty}/{wsfed/saml/oauth2}. bạn đang sử dụng Net, WSFed, điều này sẽ thấy bạn qua: http://msdn.microsoft.com/en-us/library/azure/dn151789.aspx Hãy tìm mã:.

SignInRequestMessage sirm = FederatedAuthentication.WSFederationAuthenticationModule.CreateSignInRequest("", HttpContext.Request.RawUrl, false); 
result = Redirect(sirm.RequestUrl.ToString()); 

Ngoài ra còn có một OpenIdConnect lấy mẫu ở đây: http://msdn.microsoft.com/en-us/library/azure/dn151789.aspx

Các vấn đề liên quan