đang đăng nhập của tôi, sau khi xác thực:IsAuthenticated hoạt động trên trình duyệt - nhưng không phải với ứng dụng khách!
var authTicket = new FormsAuthenticationTicket(
1,
userName,
DateTime.Now,
DateTime.Now.AddMinutes(20), // expiry
false,
roles,
"/");
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);
và, nhờ Darin Dimitrov, tôi có một phong tục Ủy quyền cho thuộc tính:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class TJAuthorize : AuthorizeAttribute {
public override void OnAuthorization(AuthorizationContext filterContext) {
string cookieName = FormsAuthentication.FormsCookieName;
if (!filterContext.HttpContext.User.Identity.IsAuthenticated ||
filterContext.HttpContext.Request.Cookies == null || filterContext.HttpContext.Request.Cookies[cookieName] == null) {
HandleUnauthorizedRequest(filterContext);
return;
}
var authCookie = filterContext.HttpContext.Request.Cookies[cookieName];
var authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = authTicket.UserData.Split(',');
var userIdentity = new GenericIdentity(authTicket.Name);
var userPrincipal = new GenericPrincipal(userIdentity, roles);
filterContext.HttpContext.User = userPrincipal;
base.OnAuthorization(filterContext);
}
bài này làm việc tuyệt vời khi tôi đang làm việc trong một phiên trình duyệt. Nhưng bây giờ tôi đang làm việc với một khách hàng Flash/Adobe Air và thuộc tính xác thực đang gây ra lỗi. Bằng cách đặt các câu lệnh gỡ lỗi vào mã, tôi có thể nói rằng:
filterContext.HttpContext.User.Identity.IsAuthenticated
là sai - ngay cả sau khi đăng nhập thành công!
Tại sao nên có bất kỳ sự khác biệt nào giữa việc sử dụng ứng dụng khách của trình duyệt và ứng dụng Máy khách? Và làm cách nào để khắc phục điều này?
EDIT: đầu mối khác: sau khi đưa vào một số báo cáo debug hơn, tôi đã phát hiện ra rằng filterContext.HttpContext.User.Identity
không đúng thiết lập khi thực hiện cuộc gọi từ máy bay - các Name
tài sản đi ra trống! ID phiên là chính xác, ID cookie là chính xác - nhưng User.Identity
không được đặt. Bất kỳ ý tưởng nào tại sao điều này có thể xảy ra?
Tuyệt vời - tôi đã thêm 'cookieless =" UseCookies "' vào thẻ '' trong '', và bây giờ nó hoạt động! Bạn thiên tài, bạn! :) –
Yay !! Cảm ơn G-d! ... đó là một nỗ lực của nhóm - công việc tuyệt vời Shaul! Cảm ơn @vnuk đã giúp chúng tôi suy nghĩ đúng hướng! – davidkomer