Khi khách hàng yêu cầu máy chủ tài nguyên nhận tài nguyên được bảo vệ bằng mã thông báo truy cập OAuth 2.0, máy chủ này xác thực mã thông báo như thế nào? Giao thức mã thông báo làm mới OAuth 2.0?
Khi khách hàng yêu cầu máy chủ tài nguyên nhận tài nguyên được bảo vệ bằng mã thông báo truy cập OAuth 2.0, máy chủ này xác thực mã thông báo như thế nào? Giao thức mã thông báo làm mới OAuth 2.0?
Câu trả lời:
Cập nhật tháng 11 năm 2015: Theo Hans Z. bên dưới - đây thực sự được xác định là một phần của RFC 7662 .
Câu trả lời gốc: Thông số OAuth 2.0 ( RFC 6749 ) không xác định rõ ràng sự tương tác giữa Máy chủ tài nguyên (RS) và Máy chủ ủy quyền (AS) để xác thực mã thông báo truy cập (AT). Nó thực sự phụ thuộc vào định dạng / chiến lược mã thông báo của AS - một số mã thông báo độc lập (như Mã thông báo Web JSON ) trong khi các mã thông báo khác có thể tương tự như cookie phiên trong đó chúng chỉ tham chiếu thông tin được giữ ở phía máy chủ tại AS.
Đã có một số cuộc thảo luận trong Nhóm làm việc OAuth về việc tạo ra một cách tiêu chuẩn để RS giao tiếp với AS để xác thực AT. Công ty của tôi (Ping Identity) đã đưa ra một cách tiếp cận như vậy cho OAuth thương mại của chúng tôi AS (PingFederate): https://support.pingidentity.com/s/document-item?bundleId=pingfederate-93&topicId=lzn1564003025072.html#lzn1564003025072__section_N10578_N1002A_N10001 . Nó sử dụng tương tác dựa trên REST cho điều này rất bổ sung cho OAuth 2.0.
Xác thực mã thông báo Oauth2 của Google
Yêu cầu:
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg
Trả lời:
{
"audience":"8819981768.apps.googleusercontent.com",
"user_id":"123456789",
"scope":"https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email",
"expires_in":436
}
Microsoft - Oauth2 kiểm tra ủy quyền
Github - Oauth2 kiểm tra ủy quyền
Yêu cầu:
GET /applications/:client_id/tokens/:access_token
Trả lời:
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "abc123",
"app": {
"url": "http://my-github-app.com",
"name": "my github app",
"client_id": "abcde12345fghij67890"
},
"note": "optional note",
"note_url": "http://optional/note/url",
"updated_at": "2011-09-06T20:39:23Z",
"created_at": "2011-09-06T17:26:27Z",
"user": {
"login": "octocat",
"id": 1,
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "somehexcode",
"url": "https://api.github.com/users/octocat"
}
}
Đăng nhập bằng Amazon - Hướng dẫn dành cho nhà phát triển (tháng 12 năm 2015, trang 21)
Yêu cầu :
https://api.amazon.com/auth/O2/tokeninfo?access_token=Atza|IQEBLjAsAhRmHjNgHpi0U-Dme37rR6CuUpSR...
Phản ứng :
HTTP/l.l 200 OK
Date: Fri, 3l May 20l3 23:22:l0 GMT
x-amzn-RequestId: eb5be423-ca48-lle2-84ad-5775f45l4b09
Content-Type: application/json
Content-Length: 247
{
"iss":"https://www.amazon.com",
"user_id": "amznl.account.K2LI23KL2LK2",
"aud": "amznl.oa2-client.ASFWDFBRN",
"app_id": "amznl.application.436457DFHDH",
"exp": 3597,
"iat": l3ll280970
}
Một bản cập nhật về câu trả lời của @Scott T .: giao diện giữa Máy chủ tài nguyên và Máy chủ ủy quyền để xác thực mã thông báo đã được chuẩn hóa trong IETF RFC 7662 vào tháng 10 năm 2015, xem: https://tools.ietf.org/html/rfc7662 . Một cuộc gọi xác nhận mẫu sẽ trông như sau:
POST /introspect HTTP/1.1
Host: server.example.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer 23410913-abewfq.123483
token=2YotnFZFEjr1zCsicMWpAA
và một câu trả lời mẫu:
HTTP/1.1 200 OK
Content-Type: application/json
{
"active": true,
"client_id": "l238j323ds-23ij4",
"username": "jdoe",
"scope": "read write dolphin",
"sub": "Z5O3upPC88QrAjx00dis",
"aud": "https://protected.example.net/resource",
"iss": "https://server.example.com/",
"exp": 1419356238,
"iat": 1419350238,
"extension_field": "twenty-seven"
}
Tất nhiên việc áp dụng bởi các nhà cung cấp và sản phẩm sẽ phải xảy ra theo thời gian.
scope
tham số truy vấn có giá trị chứa danh sách phạm vi được phân tách bằng dấu cách
Thông số OAuth 2.0 không xác định phần. Nhưng có thể có một vài lựa chọn:
Khi máy chủ tài nguyên nhận được mã thông báo trong Tiêu đề Authz thì nó sẽ gọi API xác thực / introspect trên máy chủ Authz để xác thực mã thông báo. Ở đây, máy chủ Authz có thể xác thực nó bằng cách sử dụng DB Store hoặc xác minh chữ ký và các thuộc tính nhất định. Là một phần của phản hồi, nó giải mã mã thông báo và gửi dữ liệu thực tế của mã thông báo cùng với thời gian hết hạn còn lại.
Máy chủ Authz có thể mã hóa / ký mã thông báo bằng khóa riêng và sau đó có thể cung cấp khóa công khai / chứng chỉ cho Máy chủ tài nguyên. Khi máy chủ tài nguyên nhận được mã thông báo, nó sẽ giải mã / xác minh chữ ký để xác minh mã thông báo. Đưa nội dung ra và xử lý mã thông báo. Sau đó, nó có thể cung cấp quyền truy cập hoặc từ chối.
Thông số kỹ thuật OAuth v2 chỉ ra:
Các thuộc tính mã thông báo truy cập và các phương thức được sử dụng để truy cập các tài nguyên được bảo vệ nằm ngoài phạm vi của thông số kỹ thuật này và được xác định bởi các thông số kỹ thuật đồng hành.
Máy chủ ủy quyền của tôi có điểm cuối dịch vụ web (SOAP) cho phép Máy chủ tài nguyên biết liệu access_token có hợp lệ hay không.