2014-02-10 75 views
5

我正在更改我們的身份驗證實現以使用Owin使用MVC5 ASP.NET身份。在MVC5 ASP.NET身份中自定義cookie值

但是,我們需要將我們的登錄與同一域中的其他鏈接應用程序和網站進行整合。我們目前通過在多個子域中的應用程序之間共享Cookie來實現這一點。該cookie以非常特定的格式和加密算法可以使用各種應用程序和技術(即,不是全部都在.NET中或在同一臺服務器上)。

我發現在App_Start ConfigureAuth.cs中,您可以設置app.UseCookieAuthentication來指定Cookie名稱和Cookie的子域名(例如ASP.NET Identity Cookie across subdomains)。

這是一個很好的開始,但我也需要將cookie的實際值更改爲特定的格式和加密算法。

有誰知道如何自定義用於創建和讀取cookie的值和加密類型?

感謝您的幫助, Saan

回答

11

CookieAuthenticationOptions類有一個叫做TicketDataFormat屬性,它是爲這個目的。您可以實現一個自定義的ISecureDataFormat對象並實現此目的。如果您尚未覆蓋此設置,則會爲此TicketDataFormat分配默認值。

app.UseCookieAuthentication(new CookieAuthenticationOptions() 
{ 
    TicketDataFormat = new MyCustomSecureDataFormat() 
}); 

public class MyCustomSecureDataFormat : ISecureDataFormat<AuthenticationTicket> 
{ 
    private static AuthenticationTicket savedTicket; 

    public string Protect(AuthenticationTicket ticket) 
    { 
     //Ticket value serialized here will be the cookie sent. Encryption stage. 
     //Make any changes if you wish to the ticket 
     ticket.Identity.AddClaim(new Claim("Myprotectionmethod", "true")); 
     return MySerializeAndEncryptedStringMethod(ticket); 
    } 

    public AuthenticationTicket Unprotect(string cookieValue) 
    { 
     //Invoked everytime when a cookie string is being converted to a AuthenticationTicket. 
     return MyDecryptAndDeserializeStringMethod(cookieValue); 
    } 
} 
+0

正是我在找的東西。謝謝 – Saan