@manhng

Welcome to my blog!

SSO with Microsoft Federation (ADFS)

October 11, 2019 08:38

Single-Sign On (SSO) with Microsoft Federation (ADFS)

  • Microsoft Federation (ADFS)
  • WS-Federation (Web Services Federation)WS-TrustWS-Security
  • Single-Sign On (SSO)
  • Active Directory Federation Services (ADFS)
  • Azure Active Directory (AAD)
  • OAuth2 + OIDC
  • SOAP (SOAP Web Services)
  • SAML2 - Security Assertion Markup Language (SAML2)
  • HTTP/HTTPs - HyperText Transfer Protocol
  • WS-Federation, SAML, OAuth, Open ID, Open ID Connect

Cookie

Cookie là gì?
Cookie thường là một file text nhỏ được lưu trong máy của người dùng. Nó lưu trữ một số thông tin về người dùng như thông tin đăng nhập, các lựu chọn cá nhân hóa… Cookie được sinh ra khi bạn dùng trình duyệt để vào một trang web mà sử dụng cookie để lưu lại thông tin, trạng thái hiện tại của bạn.
Phân loại Cookie
Cookie được chia làm 2 loại dựa theo tính chất của nó.
- Session cookie: temporary cookie, non-persist cookie, transient cookie là những tên gọi khác của nó. Loại cookie này được lưu trữ trong bộ nhớ tạm thời và được hủy ngay sau khi trình duyệt close. Session cookie thường được dùng để lưu trữ Session ID.
- Persistent cookie: hay còn gọi là permanent cookie, stored cookie. Chúng có thời gian sống (expiry date) và được lưu trữ trên máy người dùng đến khi thời gian sống kết thúc hoặc bị xóa bởi người dùng.
Ưu điểm của Cookie
- Truy cập nhanh chóng (do lưu trữ trên máy client)
- Dễ dàng duy trì.
Nhược điểm của Cookie
- Độ bảo mật không cao (do lưu trữ dạng plain-text trên máy client)
- Người dùng có toàn quyền thao tác với file cookie.
Khi nào nên sử dụng Cookie
Dựa vào những ưu và nhược điểm của Cookie, bạn có thể thấy chúng ta chỉ nên sử dụng cookie để lưu những thông tin không yêu cầu bảo mật cao, và được sử dụng trong suốt phiên làm việc.
Cách tạo Cookie trong ASP.NET
Để tạo một Cookie trong ASP.NET, chúng ta thường sử dụng đối tượng HttpCookie và Response. Ví dụ:
HttpCookie userInfo = new HttpCookie("userInfo");
userInfo["Username"] = "CodeBlue";
userInfo.Expires.Add(new TimeSpan(0, 1, 0));
Response.Cookies.Add(userInfo);
Các lấy giá trị của Cookie trong ASP.NET
Để lấy và sử dụng giá trị được lưu trong Cookie, chúng ta sử dụng đối tượng Request. Ví dụ:
HttpCookie userInfo = Request.Cookies["userInfo"];
if (userInfo != null)
{
string userName = userInfo["UserName"].ToString();
}
Cách xóa Cookie trong ASP.NET
Mặc định, Cookie sẽ tự động được xóa sau khi hết thời gian sống (expiry date). Bạn có thể xóa ngay cookie bằng cách set thời gian expire của Cookie về trước ngày hiện tại. Ví dụ:
myCookie.Expires = DateTime.Now.AddDays(-1d);

Session

Session là gì?
Một session được hiểu như một phiên làm việc giữa client và server, bắt đầu khi có request từ client, kết thúc khi người dùng đóng ứng dụng hoặc khi session hết thời gian timeout. Cũng giống như Cookie, Session được dùng để lưu trữ thông tin liên quan đến người dùng, nhưng thay vì được lưu trên máy client, các biến session được lưu trên máy server. Mỗi session có một định danh duy nhất (SessionID).
Cách sử dụng Session trong ASP.NET
Cách tạo và sử dụng session trong ASP.NET rất đơn giản. Ví dụ:
Session ["UserID"] = "101";
if(Session["UserID"] ==null)
{
Response.Write("Page has expired.”);
}
Cách xóa Session trong ASP.NET
Thông thường, đối tượng session sẽ tự hủy sau khi hết thời gian timeout. Thời gian này mặc định là 20 phút nếu không được chỉ ra. Bạn cũng có thể hủy session bằng cách gọi đến phương thức Session.Abandon().
Ưu điểm của Session so với Cookie
- Session có thể lưu được những đối tượng phức tạp hơn.
- Session có độ bảo mật cao hơn (do được lưu trên server).
Cơ chế hủy Session của server
Chúng ta vẫn thường thấy rằng, khi bạn đóng trình duyệt rồi vào lại một trang web, bạn sẽ phải đăng nhập lại nếu bạn không dùng chức năng ghi nhớ trước đó. Như vậy bạn đang làm việc trong một session mới. Phải chăng session cũ đã bị hủy ngay sau khi bạn đóng trình duyệt?
Không phải vậy. Bạn nên nhớ một khái niệm cơ bản của giao thức HTTP rằng nó làm việc theo nguyên tắc request/response, nghĩa là client chỉ kết nối đến server khi có request từ phía client mà thôi. Nếu không có request, server hoàn toàn mù tịt về phía client. Điều đó cho thấy, server hoàn toàn không biết người dụng đóng trình duyệt lúc nào để mà hủy session đi.
Như bạn biết, mỗi session được định danh duy nhất bởi SessionID. Và SessionID này thực tế được lưu trên máy client trong Session Cookie. Khi bạn đóng trình duyệt, Session Cookie này được hủy ngay lập tức. Lúc này, các biến session vẫn còn tồn tại trên server. Khi mở lại trình duyệt vào lại trang web cũ, Session Cookie mới được tạo ra, một SessionID mới được ghi vào Session Cookie mới (do trong Session Cookie mới không có SessionID của session cũ), một phiên làm việc mới (session) bắt đầu. Các biến session cũ của phiên làm việc trước đó sẽ được giải phóng (hủy) khi hết thời gian timeout.

Samples

https://github.com/manhnguyenv/SSO

http://arunendapally.com/post/implementation-of-single-sign-on-(sso)-in-asp.net-mvc

GraphQL order management example

https://github.com/manhnguyenv/example-orders

Categories

Recent posts