7

Chúng tôi có một hệ thống kế thừa được xây dựng trên ASP.NET Mvc 4, bây giờ chúng tôi muốn hỗ trợ Đăng nhập tín hiệu qua Azure Active Directory cho người dùng hiện tại cũng như người dùng mới. Vì chúng tôi đã quản lý quy trình xác thực của riêng mình, ASP.NET Identity chắc chắn không phù hợp với trường hợp của chúng tôi.Cookie bên ngoài để đăng nhập bên ngoài trong ASP.NET OWIN

Tôi đã quản lý để tạo bản trình diễn đang hoạt động trên chế độ thụ động trung gian OWI OpenIdConnect mà không sử dụng ASP.NET Identity. Mã dưới đây hoạt động chính xác:

app.SetDefaultSignInAsAuthenticationType("ExternalCookie"); 
app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = "ExternalCookie", 
    AuthenticationMode = AuthenticationMode.Passive, 
}); 

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions 
    { 
     AuthenticationMode = AuthenticationMode.Passive, 
     ClientId = ClientId, 
     Authority = Authority 

     // More code 
    }); 

Và trong ExternalLoginCallback hành động:

public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
{ 
    var authManager = Request.GetOwinContext().Authentication; 

    var result = await authManager.AuthenticateAsync("ExternalCookie"); 
    authManager.SignOut("ExternalCookie"); 

    //More code to convert to local identity 
} 

trường hợp này là thực sự phổ biến thậm chí sử dụng các nhà cung cấp khác như Google, Facebook hay Twitter. Một điều tôi chưa rõ ràng là ExternalCookie, có lẽ tôi đã bỏ lỡ toàn bộ sự việc. Sự hiểu biết của tôi là khi đăng nhập bên ngoài thành công, cookie bên ngoài được sử dụng để lưu trữ danh tính xác nhận quyền sở hữu bên ngoài. Và sau đó chúng tôi gọi:

var result = await authManager.AuthenticateAsync("ExternalCookie"); 
authManager.SignOut("ExternalCookie"); 

Để nhận dạng nhận dạng bên ngoài và sau đó chuyển đổi nhận dạng bên ngoài thành nhận dạng địa phương. Tôi có một chút nhầm lẫn lý do tại sao chúng tôi phải gọi SignOut cookie bên ngoài trong trường hợp này.

Ngoài ra, tôi không chắc liệu Cookie bên ngoài có phải là phải khi sử dụng đăng nhập bên ngoài hay chúng tôi có các cách khác mà không sử dụng Cookie bên ngoài.

Hãy nhờ ai đó giải thích về điểm này.

+1

Để lại câu hỏi đầu tiên của bạn: SignOut, nó sẽ bị xóa. Xem [câu hỏi SO này] (http://stackoverflow.com/questions/20569396/why-call-signoutdefaultauthenticationtypes-externalcookie-before-use-of-applic). Để lại câu hỏi thứ ba của bạn: "ExternalCookie" tên, tôi khá chắc chắn điều này chỉ đơn giản là để giữ cho mã auth của bạn đề cập đến cùng một cookie. Nếu bạn đã thay thế tất cả các trường hợp chuỗi chữ "ExternalCookie" trong mã của bạn bằng, "BlergyBlergy", chức năng vẫn hoạt động. Kiểm tra cookie trình duyệt của bạn trực tiếp trong suốt vòng đời web để minh họa. –

+1

Brock Allen có một [tuyệt đối về toàn bộ chủ đề đăng nhập bên ngoài tại đây] (http://brockallen.com/2014/01/09/a-primer-on-external-login-providers-social-logins-with-owinkatana -authentication-middleware /). –

+0

@ChrisSimmons: Cảm ơn bạn đã liên kết, tôi cũng tìm thấy câu trả lời này http://stackoverflow.com/questions/26166826/usecookieauthentication-vs-useexternalsignincookie được giải thích rất rõ. –

Trả lời

1

Để trả lời câu hỏi cuối cùng của bạn, bạn thay đổi tên của tập tin cookie trong startup.auth nơi bạn cấu hình bên ngoài Cookie -

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

Bạn có thể sử dụng một chuỗi thay vì DefaultAuthenticationTypes enum và trực tiếp chỉ định tên của các cookie như -

app.UseExternalSignInCookie("myExternalCookie"); 
+0

trong trường hợp bạn đã sử dụng chuỗi, vì vậy bạn chỉ cần chỉ định một tên khác. – naveenraina

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