@manhng

Welcome to my blog!

Keycloak and SSO in ASP.NET MVC 5 + ASP.NET Core MVC

October 30, 2019 11:58

Keycloak and SSO in ASP.NET MVC 5 (edit)

https://github.com/dylanplecki/KeycloakOwinAuthentication/wiki/ASP.NET-MVC-Tutorial

Keycloak and SSO in ASP.NET Core

https://medium.com/@xavier.hahn/adding-authorization-to-asp-net-core-app-using-keycloak-c6c96ee0e655

An example single page asp.net core application that uses Angular and Keycloak as identity provider.

https://github.com/Gimly/SampleNetCoreAngularKeycloak

ASP.NET Web API 2

https://github.com/SoftUni/SPA-with-AngularJS/tree/master/Ads-REST-Services

https://nakov.com/blog/2014/12/22/webapi-owin-identity-custom-login-service/

https://www.red-gate.com/simple-talk/dotnet/asp-net/introducing-single-sign-on-to-an-existing-asp-net-mvc-application/

https://dzone.com/articles/learn-how-to-secure-your-aspnet-mvc-app-with-sso

https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/individual-accounts-in-web-api

https://www.codeproject.com/Articles/1183150/Securing-ASP-NET-Web-API-using-Custom-Token-Based

Keycloak - Server Application Guide

https://scalac.io/user-authentication-keycloak-1/

https://www.keycloak.org/docs/7.0/server_admin/

Xác thực tiếng Việt

https://medium.com/@hoantv1506/h%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-oauth2-v%C3%A0-x%C3%A2y-d%E1%BB%B1ng-m%E1%BB%99t-authorization-server-c%C6%A1-b%E1%BA%A3n-cho-ng%C6%B0%E1%BB%9Di-m%E1%BB%9Bi-b%E1%BA%AFt-%C4%91%E1%BA%A7u-9177c2807a64

SSO in ASP.NET

https://www.codeproject.com/Articles/106439/Single-Sign-On-SSO-for-cross-domain-ASP-NET-applic

https://www.codeproject.com/Articles/114484/Single-Sign-On-SSO-for-cross-domain-ASP-NET-appl-2

https://www.codeproject.com/articles/1140228/implementation-of-single-sign-on-sso-in-asp-net-mv

https://www.scoop.it/topic/net-coding

https://silverhair2010.wordpress.com/2012/11/21/single-sign-on-sso-for-cross-domain-asp-net-applications-refer/

https://sudoman1012.wordpress.com/2015/02/11/dev-tip-single-sign-on-sso-for-cross-domain-asp-net-applications/

Hi nageshrgosul,

According to your description, as far as I know, you want to implement cross domain SSO,

Single Sign On (SSO) for cross-domain ASP.NET applications: Part-I - The design blue print:

https://www.codeproject.com/Articles/106439/Single-Sign-On-SSO-for-cross-domain-ASP-NET-applic 

Single Sign On (SSO) for cross-domain ASP.NET applications: Part-II - The implementation:

https://www.codeproject.com/Articles/114484/Single-Sign-On-SSO-for-cross-domain-ASP-NET-appl 

Introducing Single Sign-on to an existing ASP.NET MVC application:

https://www.red-gate.com/simple-talk/dotnet/asp-net/introducing-single-sign-on-to-an-existing-asp-net-mvc-application/ 

Best Regards,

Eric Du

SSO in .NET Core

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/community?view=aspnetcore-2.0

  • AspNet.Security.OpenIdConnect.Server (ASOS)
  • Gluu Server
  • IdentityServer
  • OpenIddict

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-3.1&tabs=visual-studio

IdentityServer4 is an OpenID Connect and OAuth 2.0 framework for ASP.NET Core. IdentityServer4 enables the following security features:

  • Authentication as a Service (AaaS)
  • Single sign-on/off (SSO) over multiple application types
  • Access control for APIs
  • Federation Gateway

https://forums.asp.net/t/2098726.aspx?How+can+i+do+a+Single+Sign+On+Step+by+step+Asp+net+MVC+5+Authentication+

http://forums.asp.net/t/1335297.aspx?how+to+implement+single+sign+on+in+c+net

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

http://www.codeproject.com/Articles/429166/Basics-of-Single-Sign-on-SSO

https://msdn.microsoft.com/en-us/library/ms972971.aspx

SSO:

https://www.learmoreseekmore.com/2019/09/part-1-share-authentication-cookie-sso.html (Show Code)

https://www.miniorange.com/asp.net-single-sign-on-(sso) (Show Code)

https://www.objectivity.co.uk/blog/introducing-sso-single-sign-existing-asp-net-mvc-application/

https://developers.onelogin.com/ (Chargeable)

SSO:

https://stackoverflow.com/questions/14309090/c-sharp-asp-net-single-sign-on-implementation

There are multiple options to implement SSO for a .NET application.

Check out the following tutorials online:

Basics of Single Sign on, July 2012

http://www.codeproject.com/Articles/429166/Basics-of-Single-Sign-on-SSO

GaryMcAllisterOnline: ASP.NET MVC 4, ADFS 2.0 and 3rd party STS integration (IdentityServer2), Jan 2013

http://garymcallisteronline.blogspot.com/2013/01/aspnet-mvc-4-adfs-20-and-3rd-party-sts.html

The first one uses ASP.NET Web Forms, while the second one uses ASP.NET MVC4.

If your requirements allow you to use a third-party solution, also consider OpenID. There's an open source library called DotNetOpenAuth.

For further information, read MSDN blog post Integrate OpenAuth/OpenID with your existing ASP.NET application using Universal Providers.

Hope this helps!

SSO:

Single Sign On (SSO) for cross-domain ASP.NET applications: Part-II - The implementation

Original source ccan be located at http://www.codeproject.com/Articles/114484/Single-Sign-On-SSO-for-cross-domain-ASP-NET-appl

Al-Farooque Shubho, 4 Oct 2010

Implementation approach of a domain independent Single Sign On (SSO) for ASP.NET applications.

SSO in ASP.NET MVC:

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

https://dzone.com/articles/learn-how-to-secure-your-aspnet-mvc-app-with-sso

SSO in Microsoft:

Authorized client applications section, you identify the applications that you want to authorize to your add-in's web application. Each of the following IDs needs to be pre-authorized.

  • d3590ed6-52b3-4102-aeff-aad2292ab01c (Microsoft Office)
  • ea5a67f6-b6f3-4338-b240-c655ddc3cc8e (Microsoft Office)
  • 57fb890c-0dab-4253-a5e0-7188c88b2bb4 (Office on the web)
  • 08e18876-6177-487e-b8b5-cf950c1e598c (Office on the web)
  • bc59ab01-8403-45c6-8796-ac3ef710b3e3 (Outlook on the web)

OAuth2 + OpenID Connect (in English)

October 12, 2019 17:22

Authentication on the Web (Sessions, Cookies, JWT, localStorage, and more) (edit)

https://www.youtube.com/watch?v=2PPSXonhIck

OAuth 2.0 and OpenID Connect (in plain English)

https://www.youtube.com/watch?v=996OiexHze0

OAuth 2.0 terminology

  • Resource owner
  • Client
  • Authorization server
  • Resource server
  • Authorization grant
  • Redirect URI
  • Access token

 

Test OAuth 2.0 requests and debug responses.

https://oauthdebugger.com/

Decode, verify and generate JWT

https://jwt.io/

OpenID Connect

Test OpenID Connect requests and debug responses.

https://oidcdebugger.com/

https://www.websiterank.co.uk/vi/domain/manhng.com/

Microsoft

https://devblogs.microsoft.com/aspnet/2019/10/

Generate Code using T4 Template

https://devblogs.microsoft.com/aspnet/how-to-customize-the-generated-files-from-the-new-scaffolded-item-dialog/

Identity Server 4

OpenID Connect and OAuth 2.0 Framework for ASP.NET Core

https://github.com/IdentityServer

OpenID Connect and OAuth 2.0 Framework for ASP.NET Core

Additional resources

JWT

https://docs.microsoft.com/en-us/dotnet/architecture/microservices/secure-net-microservices-web-applications/

https://abelsquidhead.com/index.php/2017/12/18/using-tokens-and-cookies-for-authorization-for-asp-net-core-2-0/

https://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/

https://salslab.com/a/jwt-authentication-and-authorisation-in-asp-net-core-web-api

https://www.blinkingcaret.com/2018/07/18/secure-an-asp-net-core-web-api-using-cookies/

https://garywoodfine.com/asp-net-core-2-2-jwt-authentication-tutorial/

http://www.dotnetpedia.com/nityaprakash/Blog/2017/Oct/1029/JWT-Token-based-Authentication-in-ASP-Net-Core-Web-API

https://www.meziantou.net/jwt-authentication-with-asp-net-core.htm

https://fullstackmark.com/post/13/jwt-authentication-with-aspnet-core-2-web-api-angular-5-net-core-identity-and-facebook-login

https://amanagrawal.blog/2017/09/18/jwt-token-authentication-with-cookies-in-asp-net-core/

https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage

http://www.binaryintellect.net/articles/1fdc8b3f-06a1-4f36-8c0b-7852bf850f52.aspx/

https://www.red-gate.com/simple-talk/dotnet/net-development/using-auth-cookies-in-asp-net-core/

https://www.c-sharpcorner.com/blogs/jwt-based-tokenisation-via-net-core

JWT in ASP.NET 3.0

https://jasonwatmore.com/post/2019/10/11/aspnet-core-3-jwt-authentication-tutorial-with-example-api

https://dotnetdetail.net/asp-net-core-3-0-web-api-token-based-authentication-example-using-jwt-in-vs2019/

https://www.codeproject.com/Articles/5160941/ASP-NET-CORE-Token-Authentication-and-Authorizatio

https://www.c-sharp.vn/dot-net-core/dot-net-core-bearer-token-with-jwt-e477ff

BASIC JAVASCRIPT PROJECTS

https://www.youtube.com/watch?v=Kp3HGwlXwCk

OAuth2

August 12, 2017 23:10

OAuth2 là gì?

OAuth2 không đơn thuần chỉ là giao thức kết nối, nó là một "nền tảng" mà chúng ta phải triển khai ở cả hai phía: Client và Server. Sau đây hãy cùng làm quen với các tác nhân (hay đối tượng) tham gia vào hoạt động của OAuth2.

Các tác nhân (đối tượng) trong Oauth2
OAuth2 làm việc với 4 đối tượng mang những vai trò riêng:

Resource Owner (User): Là những người dùng ủy quyền cho ứng dụng cho phép truy cập tài khoản của họ. Sau đó ứng dụng được phép truy cập vào những dữ liệu người dùng nhưng bị giới hạn bởi những phạm vi (scope) được cấp phép. (VD: chỉ đọc hay được quyền ghi dữ liệu) => Resource Owner chính là bạn.

Client (Application): Là những ứng dụng mong muốn truy cập vào dữ liệu người dùng. Trước khi được phép tương tác với dữ liệu thì ứng dụng này phải qua bước ủy quyền của User, và phải được kiểm tra xác nhận thông qua API. => Có thể hiểu là các ứng dụng sử dụng Facebook, Twitter, Google API chẳng hạn => Client là Facebook.

Resource Server (API): Nơi lưu trữ thông tin tài khoản của User và được bảo mật.

Authorization Server (API): Làm nhiệm vụ kiểm tra thông tin user (VD: ID), sau đó cấp quyền truy cập cho Application thông qua việc phát sinh "access token".

Resource ServerAuthorization Server chính là điểm khác biệt cơ bản giữa OAuth2OAuth1 khi tách biệt được hai thao tác: chứng thực (Authorization) và cung cấp thông tin người dùng (Resource) thành 2 Server.

Vấn đề về token của OAuth2

https://accounts.google.com/o/oauth2/token

Khi truy suất vào bộ API của Google hay Facebook thì đụng tới cái này, có vài vấn đề cần hỏi các bác:

+ khi lấy được access token và refresh token, sau một thời gian thì access token sẽ hết hạn. vậy để tạo một access token mới từ refresh token thì phải làm sao?
+ việc lưu lại refresh token cần những cơ chế bảo mật như thế nào để ko bị lộ?

Authorization Grant (loại ủy quyền)

Loại ủy quyền phụ thuộc vào phương thức mà Application sử dụng để yêu cầu ủy quyền, Oauth2 định nghĩa ra 4 loại:

  1. Authorization Code: sử dụng với các server-side Application.
  2. Implicit: sử dụng với các Mobile App (ứng dụng chạy trên thiết bị của User) hoặc Web App (có thể hiểu là Browser App cũng được, VD: Chrome Extension).
  3. Resource Owner Password Credentials: sử dụng với các Trusted Application, kiểu như những ứng dụng của chính Service.
  4. Client Credentials: sử dụng với các ứng dụng truy cập thông qua API.

1) Grant Type: Authorization Code

Step 1: Yêu cầu authorization_code

Đầu tiên Application sẽ gửi User link đến nơi để bắt đầu quá trình nhận authorization_code. Ví dụ:

https://OAUTH_SERVER.DOMAIN/OAuth/Authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read

https://OAUTH_SERVER.DOMAIN/oauth/authorize: API Authorization Endpoint.

client_id=CLIENT_ID: Client ID của Application sau khi đăng ký với Service.

redirect_uri=CALLBACK_URL: Nơi quay về sau khi sinh ra authorization_code.

response_type=code: tham số để hiểu được ứng dụng đang yêu cầu nhận authorization_code.

scope=read: định nghĩa phạm vi cho phép Application truy cập.

Step 2: User ủy quyền cho Application

Khi User click vào link, việc đầu tiên cần làm là User đăng nhập để định danh người dùng. Sau đó User sẽ được dẫn đến màn hình để Cho phép hoặc Từ chối Application truy cập các thông tin của mình.

Step 3: Application nhận authorization_code

Nếu User click vào Authorize application, bên cung cấp dịch vụ sẽ chuyển hướng người dùng đến Application redirect URI (đã được đăng ký từ trước đó), tại đây Application sẽ phải thực hiện thao tác lưu lại authorization_code. Ví dụ:

https://APPLICATION.DOMAIN/callback?code=AUTHORIZATION_CODE

Step 4: Application yêu cầu access_token

Sau khi nhận được authorization_code, Application cần thực hiện Request lên Oauth Server một lần nữa để lấy được access_token. Việc này phải được Application đảm nhận và User không cần thao tác thêm gì nữa. Link request có định dạng như sau:

https://OAUTH_SERVER.DOMAIN/oauth/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=CALLBACK_URL

 

Step 5: Application nhận access_token

Nếu quá trình ủy quyền (authorization) thành công, phía API sẽ gửi thông tin trả lời dưới dạng JSON chứa access_token (hoặc có thể kèm theo cả refesh_token) tới Application. Dữ liệu trả về có dạng như sau:

{
        "access_token":"ACCESS_TOKEN",
        "token_type":"bearer",
        "expires_in":2592000,
        "refresh_token":"REFRESH_TOKEN",
        "scope":"read",
        "uid":966996,
        "info":
        {
                "name":"Tungshooter",
                "email":"tungshooter@socool.com"
        }
}

Tới đây Application đã được User ủy quyền truy cập. Application có thể sử dụng access_token để truy cập những tài nguyên của dịch vụ mà User cho phép, ví dụ thông tin email, ảnh avatar, ... cho tới khi access_token hết hạn sử dụng. Nếu phía API hỗ trợ và gửi về thêm cả thông tin refresh_token thì Application có thể sử dụng để đổi lấy access_token mới khi access_token cũ hết hạn.

4) Grant Type: Client Credentials

Loại ủy quyền này phục vụ cho việc truy cập vào chính thông tin tài khoản của Application tại Service. Có thể hiểu nôm na là Application mong muốn thay đổi thông tin description hoặc redirect_uri hay lấy thông tin của chính Application thông qua API. Bạn có thể thấy là loại ủy quyền này không có sự tham gia của User.

Flow cũng đơn giản, Application cần gửi client_id, client_secret là có thể thực hiện tự ủy quyền cho chính mình:

https://OAUTH_SERVER.DOMAIN/token?grant_type=client_credentials&client_id=CLIENT_ID&client_secret=CLIENT_SECRET

Sử dụng Access Token

Sau khi đã có thông tin access_token, đọc document xem những API được cung cấp là ta có thể thực hiện một lời gọi API đơn giản với curl như sau:

curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" "https://API_SERVER.DOMAIN/v2/$OBJECT"

Refresh Token Flow

Sau khi access_token hết hạn, nếu bạn sử dụng để gọi API sẽ gặp thông báo lỗi "Invalid Token Error". Đừng lo vì nếu Service hỗ trợ cơ chế Refresh Token, chúng ta có thể dùng refresh_token để "đổi" access_token mới mà không cần thông qua User nữa. Ví dụ về request đổi access_token:

https://OAUTH_SERVER.DOMAIN/oauth/token?grant_type=refresh_token&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&refresh_token=REFRESH_TOKEN

Kết luận

  • Qua bài viết này tôi đã giới thiệu với các bạn về OAuth2: khái niệm, các đối tượng tham gia, các luồng hoạt động. Về cơ bản là nặng tính lý thuyết, còn việc triển khai chắc chắn sẽ còn gặp phải nhiều vấn đề nữa mà chúng ta phải xử lý.
  • Với các dịch vụ đã cung cấp sẵn OAuth như kiểu Facebook, Twitter, Google, Github, ... họ đã xây dựng sẵn phần Server và cả những thư viện cũng như bộ SDK cho các nền tảng rồi. Ta chỉ việc lấy bộ thư viện (hoặc SDK) về tích hợp và sử dụng.
  • Trong tình huống các bạn gặp yêu cầu phải tự xây dựng OAuth thì lý thuyết đã có ở trên rồi nhưng mà để thực hiện thì bạn phải tự code.Ý kiến cá nhân tôi thì ngại nhất là phần Client thôi, còn không bạn có thể chỉ cần tự code phần Server và đưa ra các API để Client có thể triển khai theo đúng Flow mà bạn mong muốn.

Truyền token vào trong HTTP Header sử dụng Bearer schema

https://techmaster.vn/posts/33959/khai-niem-ve-json-web-token

Bearer Token Usage

http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html

Refresh Token

http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web-api-2-owin/

Tham khảo

https://viblo.asia/p/introduction-to-oauth2-3OEqGjDpR9bL

Categories

Recent posts