Thứ Hai, 28 tháng 2, 2022
Thứ Bảy, 26 tháng 2, 2022
[The OAuth 2.1 Authorization Framework] - Giới thiệu
By
thelam92
07:33
Mô hình xác thực truyền thống Client-Server:
client gửi y/c truy cập vào protected resource trên server bằng cách sd the resource owner's credentials
Để mà có thể cho phép bên thứ 3 truy cập vào resource của mình thì server phải share credential của mình, điều này sẽ gây ra vài vấn đề và hạn chế:
- ứng dụng bên thứ 3 phải lưu trữ credential của resource server để sd trong tương lai, thường là clear text password .
- server phải support việc xác thực mật khẩu.
- ứng dụng bên thứ 3 thoải mái truy cập vào protected resources.
- resource owners ko thể thu hồi quyền truy cập của 1 bên thứ 3 riêng lẻ mà phải thu hồi quyền truy cập đối với all bên thứ 3 (bằng cách change password).
Với OAuth, client y/c truy cập resource đc hosted bởi resource server. thay vì sd resource owner's credentials để truy cập protected resources, thì client nhận 1 access token - là 1 credential biểu diễn 1 set các thuộc tính truy cập như là: scope, lifetime.
1. Roles
OAuth định nghĩa 4 roles:
- resource owner - là 1 thực thể có thể gán quyền truy cập protected resource. (RO)
- resource server- là server mà hosted cái protected resources. (RS)
- client - là ứng dụng truy vấn protected resource
- authorization server - là server issuing (phát hành) access token tới client (AS)
-> resource server và authorization server có thể cùng run trên 1 con server or tách ra.
1 authorization server có thể issue (phát hành) access token đc chấp nhận bởi nhiều resource server.
2. Protocol Flow
Refresh Token - issue bởi authorization server: là cái credentials dùng để xin cấp lại access token khi mà access token hết hạn.
Nếu mà authorization server phát hành refresh token thì nó sẽ đc phát hành cùng với access token.
ko giống như access token, refresh token chỉ dùng với authorization server, và sẽ ko bao giờ gửi đến resource server.
Access Token - là credentials sd để truy cập protected resources.
client gửi y/c truy cập vào protected resource trên server bằng cách sd the resource owner's credentials
Để mà có thể cho phép bên thứ 3 truy cập vào resource của mình thì server phải share credential của mình, điều này sẽ gây ra vài vấn đề và hạn chế:
- ứng dụng bên thứ 3 phải lưu trữ credential của resource server để sd trong tương lai, thường là clear text password .
- server phải support việc xác thực mật khẩu.
- ứng dụng bên thứ 3 thoải mái truy cập vào protected resources.
- resource owners ko thể thu hồi quyền truy cập của 1 bên thứ 3 riêng lẻ mà phải thu hồi quyền truy cập đối với all bên thứ 3 (bằng cách change password).
Với OAuth, client y/c truy cập resource đc hosted bởi resource server. thay vì sd resource owner's credentials để truy cập protected resources, thì client nhận 1 access token - là 1 credential biểu diễn 1 set các thuộc tính truy cập như là: scope, lifetime.
1. Roles
OAuth định nghĩa 4 roles:
- resource owner - là 1 thực thể có thể gán quyền truy cập protected resource. (RO)
- resource server- là server mà hosted cái protected resources. (RS)
- client - là ứng dụng truy vấn protected resource
- authorization server - là server issuing (phát hành) access token tới client (AS)
-> resource server và authorization server có thể cùng run trên 1 con server or tách ra.
1 authorization server có thể issue (phát hành) access token đc chấp nhận bởi nhiều resource server.
2. Protocol Flow
+--------+ +---------------+
| |--(1)- Authorization Request ->| Resource |
| | | Owner |
| |<-(2)-- Authorization Grant ---| |
| | +---------------+
| |
| | +---------------+
| |--(3)-- Authorization Grant -->| Authorization |
| Client | | Server |
| |<-(4)----- Access Token -------| |
| | +---------------+
| |
| | +---------------+
| |--(5)----- Access Token ------>| Resource |
| | | Server |
| |<-(6)--- Protected Resource ---| |
+--------+ +---------------+
Refresh Token - issue bởi authorization server: là cái credentials dùng để xin cấp lại access token khi mà access token hết hạn.
Nếu mà authorization server phát hành refresh token thì nó sẽ đc phát hành cùng với access token.
ko giống như access token, refresh token chỉ dùng với authorization server, và sẽ ko bao giờ gửi đến resource server.
+--------+ +---------------+ | |--(1)------- Authorization Grant --------->| | | | | | | |<-(2)----------- Access Token -------------| | | | & Refresh Token | | | | | | | | +----------+ | | | |--(3)---- Access Token ---->| | | | | | | | | | | |<-(4)- Protected Resource --| Resource | | Authorization | | Client | | Server | | Server | | |--(5)---- Access Token ---->| | | | | | | | | | | |<-(6)- Invalid Token Error -| | | | | | +----------+ | | | | | | | |--(7)----------- Refresh Token ----------->| | | | | | | |<-(8)----------- Access Token -------------| | +--------+ & Optional Refresh Token +---------------+
Access Token - là credentials sd để truy cập protected resources.
Thứ Ba, 15 tháng 2, 2022
DB8: Partial Indexes (index 1 phần)
By
thelam92
18:09
Partial index hữu ích trong case sd phổ biến là điều kiện where là giá trị hằng số (kiểu như status code)
SELECT message
FROM messages
WHERE processed = 'N'
AND receiver = ?
có thể tối ưu câu query trên bằng a two-column index như sau:thứ tự cột đánh index trong case này ko quan trọng vì ko có điều kiện range condition.
CREATE INDEX messages_todo
ON messages (receiver, processed)
với cách đánh index ở trên thì index đã làm rất tốt vai trò của mình, tốc độ search sẽ rất nhanh nhưng cũng khá là tốn dung lượng ổ cứngtại sao: tại vì có rất nhiều row sẽ ko bao giờ cần tìm (những row mà message đã processed - processed = 'Y')
-> cần dùng partial index - với partial index thì index có thể chỉ chứa những tin nhắn chưa xử lý (unprocessed messages)
cú pháp đánh index 1 phần:
CREATE INDEX messages_todo
ON messages (receiver)
WHERE processed = 'N'
bạn thấy là bây giờ ko cần đánh index trên cột "processed" luôn, vì sao?vì là index này: messages_todo đánh lên cột receiver và luôn có processed = 'N'
-> bằng việc làm như vậy thì index bây giờ giảm size đc cả chiều dọc và chiều ngang (số row ít hơn, số column cũng ít hơn)
Đăng ký:
Bài đăng (Atom)