SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
PHAN ĐỨC VIỆT
ROLE - PERMISSIONS
JWT - SESSION/COOKIE - BASIC AUTH
OAUTH 2
PHÂN QUYỀN - XÁC THỰC
XÁC THỰC
PHÂN QUYỀN
• Giới hạn quyền truy cập người dùng:
• Client/Member (Trang Frontend)
• Admin (Trang Backend)
• Ý tưởng giải quyết cơ bản: sử dụng Enum để phân biệt Role của người dùng. Ví dụ:
• [0]: Admin, [1]: Member
• True: Admin, False: Member
NẾU CÓ NHIỀU HƠN 2 ROLE
VẤN ĐỀ
• if (role == 3)?
• if (role == 10)?
• if (role == 30)?
• Làm sao để nhớ hết được Enum nào ứng với Role nào?
• Dependency Injection: lưu vào trong 1 file config.xml hay config.json,…
• Sử dụng Database: Sử dụng 1 bảng riêng để lưu trữ danh sách các Role. ID của
Role sẽ chính là Enum.
PHÂN QUYỀN
• 1 User có thể có nhiều Role?
• 1 tác vụ chỉ cho phép vài Role nhất định được phép thực thi:
CHIA NHỎ THÀNH CÁC AGGREGATE
HÃY CHIA NHỎ HỆ THỐNG!!!
• Thế nào là Aggregate:
• Post - Comment - Like: Post là một Entity còn các Like và Comment là những
Entity khác hoặc cũng có thể là Value Object , chúng nằm trong một mối quan hệ
kết tập gọi là Aggregate.
• Order - OrderItem
• Aggregate Root: là Post, Order, còn các object khác như Like hay Comment sẽ được
xác định theo Aggregate và mỗi object sẽ có một local ID.
XÁC ĐỊNH AGGREGATE ĐỂ LÀM GÌ?
• Aggregate được xác định dựa trên logic nghiệp vụ -
> use case.
• Bên trong Aggregate chia thành các Permission:
VD: ‘manage_all_order’, ‘manage_own_order’
• Lưu trong config hoặc DB đều được.
REFRACTOR
LƯU TRỮ PERMISSION ĐI KÈM VỚI ROLE
• SQL:
• Sử dụng 1 Bảng RolePermission để lưu các Permission đi kèm với Role
• Mã hóa lại dưới dạng JSON Text rồi lưu vào trong trường permissions của bảng
Role
• Đối với Postgresql: lưu trường permissions dưới dạng JSON/JSONB
• NoSQL:
• Lưu danh sách permissions trực tiếp vào trong bản ghi Role
HTTPS://GITHUB.COM/PADUVI/USER-SERVICE-BACKEND-DEMO
THAM KHẢO:
SESSION - COOKIE
Server
- Session: Cache, Database,… gọi
chung là Session Store
Client
- Cookie: trình duyệt quản lý, không
tới lượt mình lo nghĩ…
BASIC AUTH
JWT (JSON WEB TOKEN)
NÓ LÀ 1 CÔNG CỤ ĐỂ TRUYỀN TIN RẤT HỮU HIỆU
JWT KHÔNG ĐƠN THUẦN CHỈ ĐỂ XÁC THỰC
GỒM 3 PHẦN
HEADER
Mã hóa Base64URL
PAYLOAD
• iss (issuer): tổ chức phát hành token
• sub (subject): chủ đề của token
• aud (audience): đối tượng sử dụng token
• exp (expired time): thời điểm token sẽ hết hạn
• nbf (not before time): token sẽ chưa hợp lệ trước thời điểm này
• iat (issued at): thời điểm token được phát hành, tính theo UNIX time
• jti: JWT ID
RESERVED
PAYLOAD
PUBLIC
PAYLOAD
• Phần thông tin thêm dùng để truyền qua giữa các máy thành viên.
• Không được đặt khóa trùng với Reserved Key
PRIVATE
PAYLOAD
Mã hóa Base64URL
DÙNG ĐỂ XÁC THỰC
SIGNATURE
Phần chữ ký được tạo bằng cách kết hợp 2 phần Header + Payload, rồi mã
hóa nó lại bằng giải thuật encode mà ta đã khai báo ở phần Header, càng
phức tạp thì càng tốt, ví dụ như HMAC SHA-256:
KHI NÀO DÙNG JWT
COOKIE VS JWT
JWT VS COOKIE
JWT
• Không bị ảnh hưởng bởi CORS
• Phải config request
• Không cần sử dụng Session Store, bản thân
Token cũng có thể chứa được data
• Có thể sử dụng HTML5 Local Storage để lưu
trữ Token ở Browser -> tránh được tấn công
CSRF
• Thích hợp với mô hình Stateless, hoặc mở
API cho ứng dụng từ phía ngoài (Cross
Domain Ajax, Mobile App) -> gần như nếu
muốn triển khai MicroService thì bắt buộc phải
dùng JWT
Cookie
• Bị ảnh hưởng bởi CORS
• Không cần phải config request
• Phải dùng Session Store
• Nhược điểm lớn nhất: dễ bị lợi dụng để tấn
công CSRF -> người lập trình Backend sẽ rất
mệt mỏi khi xử lý dữ liệu do hacker nhúng vào
• Thích hợp trong mô hình Stateful và kiến trúc
Monolitic truyền thống.
JWT VS BASIC AUTHENTICATE
JWT
• Không giải mã được Token
• Có thể dùng trong truyền tin
Basic Authenticate
• Có thể dùng trong truyền tin
• Chỉ dùng được trong Authentication
JWT VS OAUTH 2
• Chú ý:
• JWT là chuẩn giao thức Authenticate
• OAuth2 là mô hình Authenticate
• Bên trong OAuth2 cũng có thể sử dụng JWT để làm Token:
https://help.salesforce.com/HTViewHelpDoc?id=remoteaccess_oauth_jwt_flow.htm
• Tham khảo thêm về JWT:
https://techmaster.vn/posts/33959/khai-niem-ve-json-web-token
• Sử dụng Local Storage:
http://www.w3schools.com/html/html5_webstorage.asp
OAUTH 2
ỨNG DỤNG CẦN PHẢI XIN PHÉP MÁY CHỦ LƯU TRỮ THÔNG TIN USER
BƯỚC 1
• Ứng dụng sẽ gửi lên cho máy chủ User Service các thông tin:
• App ID
• App Secret Key
• Scope (Domain muốn truy cập)
• Phía ngược lại, khi nhận được request của ứng dụng, User Service sẽ kiểm tra xác thực thông tin
ứng dụng và check các domain ứng dụng yêu cầu. Nếu ok thì sinh ra 1 đoạn mã Token
(AuthCode):
• Ta có thể sử dụng JWT ở bước này
• Sinh code random rồi lưu trong database
BƯỚC 2
• Sau khi sinh ra AuthCode, User Service sẽ chuyển hướng sang trang giao diện Đăng
nhập của chính nó:
http://localhost:411/login?authCode=abcxyz.mnb.opq&scope=user,course
• Thông thường hệ thống nhỏ thì có thể chưa cần tới khái niệm scope, tuy nhiên nếu
hệ thống lớn sẽ cần tới Scope. VD như Facebook: ‘timeline’, ‘page’, ‘group’
DONEC QUIS NUNC
XỬ LÝ THÔNG TIN ĐĂNG NHẬP NGƯỜI DÙNG
BƯỚC 3
• Kiểm tra:
• Scope mà ứng dụng gửi lên có hợp lệ hay không?
• User có đăng nhập đúng username, password không?
• Kết quả:
• Thành công: chuyển hướng về trang Success Callback mà ứng dụng đã khai báo
trước đó
• Thất bại: chuyển hướng về trang Fail Callback mà ứng dụng đã khai báo trước đó
ĐƯỜNG DẪN SUCCESS THƯỜNG CÓ DẠNG NHƯ SAU:
BƯỚC 3
• ${success_callback_uri}?accessToken=accessToken&refreshToken=refreshToken&…
• Ví dụ:
http://localhost:8080/auth/success?accessToken=abc.xyz.lmn&refreshToken=banAn
hViet&authScheme=Bearer
• Ta có thể hiểu việc chuyển hướng trang web nó giống như là đang truy cập tới 1
Route với phương thức GET. Như vậy: Ứng dụng sẽ bóc tách các Param URL rồi lưu
lại vào trong Html5 Local Storage.
SỬ DỤNG ACCESS TOKEN
BƯỚC 4
SỬ DỤNG REFRESH TOKEN
• Khi người dùng đăng nhập, tạo 1 bản ghi trong DB lưu lại
- user_id
- refresh_token
- expired_time
• Lấy ID của bản ghi vừa tạo, nhét vào trường jti (jwtID) của payload accessToken.
• Khi AccessToken hết hạn, gửi AccessToken và RefreshToken lên User Service, trên
đó check:
• jti và refresh_token khớp nhau không?
• nếu có thì generate ra accessToken, refreshToken mới
LINK DEMO:
• Backend (User Service): Sử dụng ActionHero, Sequelize:
https://github.com/paduvi/user-service-backend-demo
• Frontend (Application): Sử dụng ReactJS:
https://github.com/paduvi/user-service-frontend-demo

Contenu connexe

Tendances

Chuyen de flask -- pythonvietnam.info
Chuyen de flask  -- pythonvietnam.info Chuyen de flask  -- pythonvietnam.info
Chuyen de flask -- pythonvietnam.info Khánh Nguyễn
 
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXHướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXTechMaster Vietnam
 
Phương pháp và chiến lược đối ứng tải trong Web Application Server
Phương pháp và chiến lược đối ứng tải trong Web Application ServerPhương pháp và chiến lược đối ứng tải trong Web Application Server
Phương pháp và chiến lược đối ứng tải trong Web Application ServerGMO-Z.com Vietnam Lab Center
 
Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952Ham Chơi
 
Bai4 basic jsp_4474
Bai4 basic jsp_4474Bai4 basic jsp_4474
Bai4 basic jsp_4474Ham Chơi
 
Lập trình Python GUI vs PySide
Lập trình Python GUI vs PySideLập trình Python GUI vs PySide
Lập trình Python GUI vs PySideChien Dang
 
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...VKhang Yang
 
Mysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng ViệtMysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng ViệtKhanhPham
 
Bai3 basic servlets_956
Bai3 basic servlets_956Bai3 basic servlets_956
Bai3 basic servlets_956Ham Chơi
 
Tìm hiểu và triển khai ứng dụng Web với Kubernetes
Tìm hiểu và triển khai ứng dụng Web với KubernetesTìm hiểu và triển khai ứng dụng Web với Kubernetes
Tìm hiểu và triển khai ứng dụng Web với KubernetesGMO-Z.com Vietnam Lab Center
 
The First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupThe First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupKhanhPham
 
Lập trình web – cgi
Lập trình web – cgiLập trình web – cgi
Lập trình web – cgiSon Nguyen
 
Báo cáo thực tập - Huỳnh Anh Tuấn
Báo cáo thực tập - Huỳnh Anh TuấnBáo cáo thực tập - Huỳnh Anh Tuấn
Báo cáo thực tập - Huỳnh Anh TuấnHuỳnh Tuấn
 
Cách cài đặt localhost trên máy tính với xxamp
Cách cài đặt localhost trên máy tính với xxampCách cài đặt localhost trên máy tính với xxamp
Cách cài đặt localhost trên máy tính với xxampSon Nguyen
 

Tendances (19)

Chuyen de flask -- pythonvietnam.info
Chuyen de flask  -- pythonvietnam.info Chuyen de flask  -- pythonvietnam.info
Chuyen de flask -- pythonvietnam.info
 
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXHướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
 
Flutter vs React Native 2018
Flutter vs React Native 2018Flutter vs React Native 2018
Flutter vs React Native 2018
 
Phương pháp và chiến lược đối ứng tải trong Web Application Server
Phương pháp và chiến lược đối ứng tải trong Web Application ServerPhương pháp và chiến lược đối ứng tải trong Web Application Server
Phương pháp và chiến lược đối ứng tải trong Web Application Server
 
Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952
 
Bai4 basic jsp_4474
Bai4 basic jsp_4474Bai4 basic jsp_4474
Bai4 basic jsp_4474
 
Giới thiệu Embulk
Giới thiệu Embulk Giới thiệu Embulk
Giới thiệu Embulk
 
Web203 slide 5
Web203   slide 5Web203   slide 5
Web203 slide 5
 
Lập trình Python GUI vs PySide
Lập trình Python GUI vs PySideLập trình Python GUI vs PySide
Lập trình Python GUI vs PySide
 
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
 
03 udpt php
03 udpt   php03 udpt   php
03 udpt php
 
Mysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng ViệtMysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng Việt
 
Bai3 basic servlets_956
Bai3 basic servlets_956Bai3 basic servlets_956
Bai3 basic servlets_956
 
Tìm hiểu và triển khai ứng dụng Web với Kubernetes
Tìm hiểu và triển khai ứng dụng Web với KubernetesTìm hiểu và triển khai ứng dụng Web với Kubernetes
Tìm hiểu và triển khai ứng dụng Web với Kubernetes
 
Học python
Học pythonHọc python
Học python
 
The First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupThe First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress Meetup
 
Lập trình web – cgi
Lập trình web – cgiLập trình web – cgi
Lập trình web – cgi
 
Báo cáo thực tập - Huỳnh Anh Tuấn
Báo cáo thực tập - Huỳnh Anh TuấnBáo cáo thực tập - Huỳnh Anh Tuấn
Báo cáo thực tập - Huỳnh Anh Tuấn
 
Cách cài đặt localhost trên máy tính với xxamp
Cách cài đặt localhost trên máy tính với xxampCách cài đặt localhost trên máy tính với xxamp
Cách cài đặt localhost trên máy tính với xxamp
 

En vedette

Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgresTechMaster Vietnam
 
Tìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTechMaster Vietnam
 
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMasterChương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMasterTechMaster Vietnam
 
Tài Liệu Hướng Dẫn Xây Dựng Ứng Dụng iOS (iPhone/iPad)
Tài Liệu Hướng Dẫn Xây Dựng Ứng Dụng iOS (iPhone/iPad)Tài Liệu Hướng Dẫn Xây Dựng Ứng Dụng iOS (iPhone/iPad)
Tài Liệu Hướng Dẫn Xây Dựng Ứng Dụng iOS (iPhone/iPad)Vàng Cao Thanh
 
Chia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTChia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTTechMaster Vietnam
 
Session 9-10 - UI/UX design for iOS 7 application
Session 9-10 - UI/UX design for iOS 7 applicationSession 9-10 - UI/UX design for iOS 7 application
Session 9-10 - UI/UX design for iOS 7 applicationVu Tran Lam
 
Prototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch FlowPrototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch FlowTechMaster Vietnam
 
Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012TechMaster Vietnam
 
Spring MVC - Web Forms
Spring MVC  - Web FormsSpring MVC  - Web Forms
Spring MVC - Web FormsIlio Catallo
 
Testing Spring MVC and REST Web Applications
Testing Spring MVC and REST Web ApplicationsTesting Spring MVC and REST Web Applications
Testing Spring MVC and REST Web ApplicationsSam Brannen
 
Struts 2 + Spring
Struts 2 + SpringStruts 2 + Spring
Struts 2 + SpringBryan Hsueh
 

En vedette (20)

Postgresql security
Postgresql securityPostgresql security
Postgresql security
 
Minimum Viable Products
Minimum Viable ProductsMinimum Viable Products
Minimum Viable Products
 
Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgres
 
Knex Postgresql Migration
Knex Postgresql MigrationKnex Postgresql Migration
Knex Postgresql Migration
 
iOS Master - Detail & TabBar
iOS Master - Detail & TabBariOS Master - Detail & TabBar
iOS Master - Detail & TabBar
 
Arrowjs.io
Arrowjs.ioArrowjs.io
Arrowjs.io
 
Tìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tới
 
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMasterChương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
 
Tài Liệu Hướng Dẫn Xây Dựng Ứng Dụng iOS (iPhone/iPad)
Tài Liệu Hướng Dẫn Xây Dựng Ứng Dụng iOS (iPhone/iPad)Tài Liệu Hướng Dẫn Xây Dựng Ứng Dụng iOS (iPhone/iPad)
Tài Liệu Hướng Dẫn Xây Dựng Ứng Dụng iOS (iPhone/iPad)
 
Chia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTChia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTT
 
Making a living
Making a livingMaking a living
Making a living
 
Session 9-10 - UI/UX design for iOS 7 application
Session 9-10 - UI/UX design for iOS 7 applicationSession 9-10 - UI/UX design for iOS 7 application
Session 9-10 - UI/UX design for iOS 7 application
 
Phalcon introduction
Phalcon introductionPhalcon introduction
Phalcon introduction
 
Prototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch FlowPrototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch Flow
 
Slide that wins
Slide that winsSlide that wins
Slide that wins
 
Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012
 
Spring MVC - Web Forms
Spring MVC  - Web FormsSpring MVC  - Web Forms
Spring MVC - Web Forms
 
Testing Spring MVC and REST Web Applications
Testing Spring MVC and REST Web ApplicationsTesting Spring MVC and REST Web Applications
Testing Spring MVC and REST Web Applications
 
Struts 2 + Spring
Struts 2 + SpringStruts 2 + Spring
Struts 2 + Spring
 
Boostrap - Start Up
Boostrap - Start UpBoostrap - Start Up
Boostrap - Start Up
 

Similaire à Authentication and Authorization

Những lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNhững lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNgoc Dao
 
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì?  9 Thứ thú vị có thể làm với PHPPHP có thể làm gì?  9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHPNIIT - ICT Hà Nội
 
Bảo mật ứng dụng ASP.NET
Bảo mật ứng dụng ASP.NETBảo mật ứng dụng ASP.NET
Bảo mật ứng dụng ASP.NETHUST
 
Tim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chongTim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chongVu Trung Kien
 
ITLC HN 14 - Bizweb Microservices Architecture
ITLC HN 14  - Bizweb Microservices ArchitectureITLC HN 14  - Bizweb Microservices Architecture
ITLC HN 14 - Bizweb Microservices ArchitectureIT Expert Club
 
Sử dụng dịch vụ crawler và parser trong PHP
Sử dụng dịch vụ crawler và parser trong PHPSử dụng dịch vụ crawler và parser trong PHP
Sử dụng dịch vụ crawler và parser trong PHPAiTi Education
 
Php crawler and parser
Php crawler and parserPhp crawler and parser
Php crawler and parserNgoc Bui Dinh
 
Web application-security
Web application-securityWeb application-security
Web application-securityVisla Team
 
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015IT Expert Club
 
Dos web server it-slideshares.blogspot.com
Dos web server it-slideshares.blogspot.comDos web server it-slideshares.blogspot.com
Dos web server it-slideshares.blogspot.comphanleson
 
SINGLE SIGN ON (SSO) WITH SECURITY ASSERTION MAKUP LANGUAGE (SAML)
SINGLE SIGN ON (SSO)  WITH SECURITY ASSERTION  MAKUP LANGUAGE (SAML)SINGLE SIGN ON (SSO)  WITH SECURITY ASSERTION  MAKUP LANGUAGE (SAML)
SINGLE SIGN ON (SSO) WITH SECURITY ASSERTION MAKUP LANGUAGE (SAML)Minh Tri Lam
 
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)KhanhPham
 
Slide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdfSlide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdfHuyVnh4
 
Power your web skills
Power your web skillsPower your web skills
Power your web skillsDang Tuan
 

Similaire à Authentication and Authorization (20)

Những lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNhững lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần application
 
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì?  9 Thứ thú vị có thể làm với PHPPHP có thể làm gì?  9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
 
Bảo mật ứng dụng web
Bảo mật ứng dụng webBảo mật ứng dụng web
Bảo mật ứng dụng web
 
Bảo mật ứng dụng ASP.NET
Bảo mật ứng dụng ASP.NETBảo mật ứng dụng ASP.NET
Bảo mật ứng dụng ASP.NET
 
Tim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chongTim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chong
 
ITLC HN 14 - Bizweb Microservices Architecture
ITLC HN 14  - Bizweb Microservices ArchitectureITLC HN 14  - Bizweb Microservices Architecture
ITLC HN 14 - Bizweb Microservices Architecture
 
Bizweb Microservices Architecture
Bizweb Microservices ArchitectureBizweb Microservices Architecture
Bizweb Microservices Architecture
 
Sử dụng dịch vụ crawler và parser trong PHP
Sử dụng dịch vụ crawler và parser trong PHPSử dụng dịch vụ crawler và parser trong PHP
Sử dụng dịch vụ crawler và parser trong PHP
 
Php crawler and parser
Php crawler and parserPhp crawler and parser
Php crawler and parser
 
Web application-security
Web application-securityWeb application-security
Web application-security
 
Yii
YiiYii
Yii
 
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
 
Dos web server it-slideshares.blogspot.com
Dos web server it-slideshares.blogspot.comDos web server it-slideshares.blogspot.com
Dos web server it-slideshares.blogspot.com
 
SINGLE SIGN ON (SSO) WITH SECURITY ASSERTION MAKUP LANGUAGE (SAML)
SINGLE SIGN ON (SSO)  WITH SECURITY ASSERTION  MAKUP LANGUAGE (SAML)SINGLE SIGN ON (SSO)  WITH SECURITY ASSERTION  MAKUP LANGUAGE (SAML)
SINGLE SIGN ON (SSO) WITH SECURITY ASSERTION MAKUP LANGUAGE (SAML)
 
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
 
Báo cáo tuần đồ án
Báo cáo tuần đồ ánBáo cáo tuần đồ án
Báo cáo tuần đồ án
 
Slide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdfSlide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdf
 
Present.pptx
Present.pptxPresent.pptx
Present.pptx
 
WinEoP Framework
WinEoP FrameworkWinEoP Framework
WinEoP Framework
 
Power your web skills
Power your web skillsPower your web skills
Power your web skills
 

Plus de TechMaster Vietnam

Plus de TechMaster Vietnam (8)

Neural Network from Scratch
Neural Network from ScratchNeural Network from Scratch
Neural Network from Scratch
 
C đến C++ phần 1
C đến C++ phần 1C đến C++ phần 1
C đến C++ phần 1
 
Control structure in C
Control structure in CControl structure in C
Control structure in C
 
Basic C programming
Basic C programmingBasic C programming
Basic C programming
 
Manage your project differently
Manage your project differentlyManage your project differently
Manage your project differently
 
Apple iOS Memory Management - Vietnamese version
Apple iOS Memory Management - Vietnamese versionApple iOS Memory Management - Vietnamese version
Apple iOS Memory Management - Vietnamese version
 
Sinh viên CNTT làm gì trong 5 năm tới
Sinh viên CNTT làm gì trong 5 năm tớiSinh viên CNTT làm gì trong 5 năm tới
Sinh viên CNTT làm gì trong 5 năm tới
 
Windows 8 vs android 4
Windows 8 vs android 4Windows 8 vs android 4
Windows 8 vs android 4
 

Authentication and Authorization

  • 1. PHAN ĐỨC VIỆT ROLE - PERMISSIONS JWT - SESSION/COOKIE - BASIC AUTH OAUTH 2 PHÂN QUYỀN - XÁC THỰC
  • 3. PHÂN QUYỀN • Giới hạn quyền truy cập người dùng: • Client/Member (Trang Frontend) • Admin (Trang Backend) • Ý tưởng giải quyết cơ bản: sử dụng Enum để phân biệt Role của người dùng. Ví dụ: • [0]: Admin, [1]: Member • True: Admin, False: Member
  • 4. NẾU CÓ NHIỀU HƠN 2 ROLE VẤN ĐỀ • if (role == 3)? • if (role == 10)? • if (role == 30)? • Làm sao để nhớ hết được Enum nào ứng với Role nào? • Dependency Injection: lưu vào trong 1 file config.xml hay config.json,… • Sử dụng Database: Sử dụng 1 bảng riêng để lưu trữ danh sách các Role. ID của Role sẽ chính là Enum.
  • 5.
  • 6.
  • 7. PHÂN QUYỀN • 1 User có thể có nhiều Role? • 1 tác vụ chỉ cho phép vài Role nhất định được phép thực thi:
  • 8. CHIA NHỎ THÀNH CÁC AGGREGATE HÃY CHIA NHỎ HỆ THỐNG!!! • Thế nào là Aggregate: • Post - Comment - Like: Post là một Entity còn các Like và Comment là những Entity khác hoặc cũng có thể là Value Object , chúng nằm trong một mối quan hệ kết tập gọi là Aggregate. • Order - OrderItem • Aggregate Root: là Post, Order, còn các object khác như Like hay Comment sẽ được xác định theo Aggregate và mỗi object sẽ có một local ID.
  • 9. XÁC ĐỊNH AGGREGATE ĐỂ LÀM GÌ? • Aggregate được xác định dựa trên logic nghiệp vụ - > use case. • Bên trong Aggregate chia thành các Permission: VD: ‘manage_all_order’, ‘manage_own_order’ • Lưu trong config hoặc DB đều được.
  • 11. LƯU TRỮ PERMISSION ĐI KÈM VỚI ROLE • SQL: • Sử dụng 1 Bảng RolePermission để lưu các Permission đi kèm với Role • Mã hóa lại dưới dạng JSON Text rồi lưu vào trong trường permissions của bảng Role • Đối với Postgresql: lưu trường permissions dưới dạng JSON/JSONB • NoSQL: • Lưu danh sách permissions trực tiếp vào trong bản ghi Role
  • 13. SESSION - COOKIE Server - Session: Cache, Database,… gọi chung là Session Store Client - Cookie: trình duyệt quản lý, không tới lượt mình lo nghĩ…
  • 15. JWT (JSON WEB TOKEN)
  • 16. NÓ LÀ 1 CÔNG CỤ ĐỂ TRUYỀN TIN RẤT HỮU HIỆU JWT KHÔNG ĐƠN THUẦN CHỈ ĐỂ XÁC THỰC
  • 19. PAYLOAD • iss (issuer): tổ chức phát hành token • sub (subject): chủ đề của token • aud (audience): đối tượng sử dụng token • exp (expired time): thời điểm token sẽ hết hạn • nbf (not before time): token sẽ chưa hợp lệ trước thời điểm này • iat (issued at): thời điểm token được phát hành, tính theo UNIX time • jti: JWT ID RESERVED
  • 21. PAYLOAD • Phần thông tin thêm dùng để truyền qua giữa các máy thành viên. • Không được đặt khóa trùng với Reserved Key PRIVATE
  • 23. DÙNG ĐỂ XÁC THỰC SIGNATURE Phần chữ ký được tạo bằng cách kết hợp 2 phần Header + Payload, rồi mã hóa nó lại bằng giải thuật encode mà ta đã khai báo ở phần Header, càng phức tạp thì càng tốt, ví dụ như HMAC SHA-256:
  • 26. JWT VS COOKIE JWT • Không bị ảnh hưởng bởi CORS • Phải config request • Không cần sử dụng Session Store, bản thân Token cũng có thể chứa được data • Có thể sử dụng HTML5 Local Storage để lưu trữ Token ở Browser -> tránh được tấn công CSRF • Thích hợp với mô hình Stateless, hoặc mở API cho ứng dụng từ phía ngoài (Cross Domain Ajax, Mobile App) -> gần như nếu muốn triển khai MicroService thì bắt buộc phải dùng JWT Cookie • Bị ảnh hưởng bởi CORS • Không cần phải config request • Phải dùng Session Store • Nhược điểm lớn nhất: dễ bị lợi dụng để tấn công CSRF -> người lập trình Backend sẽ rất mệt mỏi khi xử lý dữ liệu do hacker nhúng vào • Thích hợp trong mô hình Stateful và kiến trúc Monolitic truyền thống.
  • 27. JWT VS BASIC AUTHENTICATE JWT • Không giải mã được Token • Có thể dùng trong truyền tin Basic Authenticate • Có thể dùng trong truyền tin • Chỉ dùng được trong Authentication
  • 28. JWT VS OAUTH 2 • Chú ý: • JWT là chuẩn giao thức Authenticate • OAuth2 là mô hình Authenticate • Bên trong OAuth2 cũng có thể sử dụng JWT để làm Token: https://help.salesforce.com/HTViewHelpDoc?id=remoteaccess_oauth_jwt_flow.htm • Tham khảo thêm về JWT: https://techmaster.vn/posts/33959/khai-niem-ve-json-web-token • Sử dụng Local Storage: http://www.w3schools.com/html/html5_webstorage.asp
  • 30. ỨNG DỤNG CẦN PHẢI XIN PHÉP MÁY CHỦ LƯU TRỮ THÔNG TIN USER BƯỚC 1 • Ứng dụng sẽ gửi lên cho máy chủ User Service các thông tin: • App ID • App Secret Key • Scope (Domain muốn truy cập) • Phía ngược lại, khi nhận được request của ứng dụng, User Service sẽ kiểm tra xác thực thông tin ứng dụng và check các domain ứng dụng yêu cầu. Nếu ok thì sinh ra 1 đoạn mã Token (AuthCode): • Ta có thể sử dụng JWT ở bước này • Sinh code random rồi lưu trong database
  • 31. BƯỚC 2 • Sau khi sinh ra AuthCode, User Service sẽ chuyển hướng sang trang giao diện Đăng nhập của chính nó: http://localhost:411/login?authCode=abcxyz.mnb.opq&scope=user,course • Thông thường hệ thống nhỏ thì có thể chưa cần tới khái niệm scope, tuy nhiên nếu hệ thống lớn sẽ cần tới Scope. VD như Facebook: ‘timeline’, ‘page’, ‘group’
  • 33. XỬ LÝ THÔNG TIN ĐĂNG NHẬP NGƯỜI DÙNG BƯỚC 3 • Kiểm tra: • Scope mà ứng dụng gửi lên có hợp lệ hay không? • User có đăng nhập đúng username, password không? • Kết quả: • Thành công: chuyển hướng về trang Success Callback mà ứng dụng đã khai báo trước đó • Thất bại: chuyển hướng về trang Fail Callback mà ứng dụng đã khai báo trước đó
  • 34. ĐƯỜNG DẪN SUCCESS THƯỜNG CÓ DẠNG NHƯ SAU: BƯỚC 3 • ${success_callback_uri}?accessToken=accessToken&refreshToken=refreshToken&… • Ví dụ: http://localhost:8080/auth/success?accessToken=abc.xyz.lmn&refreshToken=banAn hViet&authScheme=Bearer • Ta có thể hiểu việc chuyển hướng trang web nó giống như là đang truy cập tới 1 Route với phương thức GET. Như vậy: Ứng dụng sẽ bóc tách các Param URL rồi lưu lại vào trong Html5 Local Storage.
  • 35. SỬ DỤNG ACCESS TOKEN BƯỚC 4
  • 36. SỬ DỤNG REFRESH TOKEN • Khi người dùng đăng nhập, tạo 1 bản ghi trong DB lưu lại - user_id - refresh_token - expired_time • Lấy ID của bản ghi vừa tạo, nhét vào trường jti (jwtID) của payload accessToken. • Khi AccessToken hết hạn, gửi AccessToken và RefreshToken lên User Service, trên đó check: • jti và refresh_token khớp nhau không? • nếu có thì generate ra accessToken, refreshToken mới
  • 37. LINK DEMO: • Backend (User Service): Sử dụng ActionHero, Sequelize: https://github.com/paduvi/user-service-backend-demo • Frontend (Application): Sử dụng ReactJS: https://github.com/paduvi/user-service-frontend-demo