Triển khai OAuth 2.0

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Open Cloud hỗ trợ dòng chảy đăng nhập OAuth 2.0 với và không có PKCE, tùy thuộc vào whether your clients are confidential or công cộng.

  • Client riêng tư là ứng dụng có khả năng giữ mật mã một cách an toàn, chẳng hạn như một trang web có thể lưu trữ và lấy lại mật mã một cách an toàn trên hạ tầng của nó.
  • Client công khai là ứng dụng không thể giữ bí mật, chẳng hạn như ứng dụng trình duyệt di động và trình duyệt web.

Chúng tôi khuyến nghị mã chẩn đoán OAuth 2.0 với PKCE cho tất cả các khách hàng và yêu cầu nó cho các khách hàng công khai.

Để thực hiện dòng chảy mã quyền truy cập, ứng dụng của bạn thực hiện các bước sau đây:

  1. Tạo một công cụ kiểm tra mã và thử thách mã (chỉ cho PKCE). Điều này cho phép bạn bao gồm một thử thách trong các yêu cầu của bạn thay vì bí mật khách hàng, tăng cường sự an toàn.
  2. Gửi một yêu cầu GET đến điểm chỉnh thẩm quyền với các tham số phù hợp.
  3. Xử lý mã đăng nhập. Sau khi nhận được mã đăng nhập, hãy sử dụng mã đăng nhập từ Roblox trong yêu cầu chuyển hướng đến URL bạn đã định trong app sản phẩm. Phân tích mã đăng nhập để sử dụng sau đó.
  4. Gửi một yêu cầu POST đến đầu mối token với mã xác nhận. Nếu thành công, bạn nhận quyền truy cập và làm mới token để thực hiện các gọi API.
  5. Gọi bất kỳ API Open Cloud nào hỗ trợ OAuth 2.0 authentification based on the reference dokumentation for tài nguyên bạn muốn truy cập.

Các mục tiếp theo mô tả mỗi bước trong chi tiết hơn.

Tạo một Thử thách Mã (chỉ cho PKCE)

Trước khi khởi tạo quy trình xác nhận, bạn cần phải tạo một thử thách mã từ một công cụ xác nhận. Bạn có thể sử dụng các thư viện hoặc các hàm tích hợp trong ngôn ngữ lập trình yêu thích của bạn để tạo thử thách mã, tính toán hashes và thực hiện Base64 encrypt để tạo ra thử thách m

Khi tạo verifier mã, chỉ sử dụng những ký tự không được réo hóa, bao gồm cả các chữ cái lớn và nhỏ (A-Z, a-z), các chữ số thập phân (0-9), dấu chấm (-), dấu chuẩn (), dấu chéo (_) và dấu chấm hỏi (~) với độ dài tối thiểu 43 ký tự và

Ví dụ sau đây cho thấy cách sử dụng Javascript để tạo một máy kiểm tra mã và tạo một thử thách mã sử dụng cơ sở dữ liệu SHA-256:

Generate Code Challenge

const crypto = require('crypto');
// base64URL encode the verifier and challenge
function base64URLEncode(str) {
return str.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
}
// create sha256 hash from code verifier
function sha256(buffer) {
return crypto.createHash('sha256').update(buffer).digest(`base64`);
// create a random code verifier
var code_verifier = base64URLEncode(crypto.randomBytes(32));
// generate a challenge from the code verifier
var code_challenge = base64URLEncode(sha256(code_verifier));

Đối với PKCE, bạn cần cả verifier mã và giá trị thử thách ở các bước tiếp theo.

Xây dựng URL ẩn

Để khởi tạo quy trình xác nhận người dùng, xây dựng một URL xác nhận với các tham số yêu cầu:

  • client_id : ID khách hàng của ứng dụngcủa bạn được lấy sau khi đăng ký app của bạn.
  • redirect_uri : Địa chỉ chuyển hướng của ứng dụngcủa bạn, điểm đến lại của ứng dụngcủa bạn.
  • scope : Các khoảng cần thiết để xác định quyền truy cập mà ứng dụng của bạn cần trong một danh sách được phân cách bởi các dấu chấm câu.
  • response_type : Đặt nó thành code để chỉ ra dòng mã chẩn thẩm. Yêu cầu chỉ dành cho PKCE
  • code_challenge : Mã thử thách được tạo từ một máy kiểm tra mã.
  • code_challenge_method : Đặt giá trị tham số này vào S256 để cho thấy rằng công cụ thử nghiệm mã đã được biến hóa bằng cách sử dụng cơ sở dữ liệu SHA-256, một trong những công cụ thử nghiệm mã được hỗ trợ rộng rãi nhất và an toàn nhất.
  • state : Một giá trị ngẫu nhiên, bảo mật để duy trì trạng thái giữa yêu cầu và hồi kết. Yêu cầu chỉ dành cho non-PKCE
  • client_secret : Bí mật khách hàng của ứng dụngcủa bạn được lấy sau khi đăng nhập app của bạn . Nếu bạn đang sử dụng uwten tự động với PKCE, hãy bỏ qua parâmô trường này. Yêu cầu đăng nhập của bạn phải được biểu tượng hóa tốt, như trong ví dụ sau:
Ví dụ PKCE Authorization URL

https://apis.roblox.com/oauth/v1/authorize?client_id=7290610391231237934964
&code_challenge=PLEKKVCjdD1V_07wOKlAm7P02NC-LZ_1hQfdu5XSXEI
&code_challenge_method=S256
&redirect_uri=https://example.com/redirect
&scope=openid%20profile
&response_type=code
&state=abc123

Khi người dùng truy cập URL, họ được chuyển qua dòng chẩy ủy quyền. Nếu thành công, Roblox chuyển người dùng đến редь_uri đã định.

Xử lý mã thẩm quyền

Khi một lưu lượng đăng nhập thành công, app của bạn nhận được một yêu cầu GET từ máy chủ đăng nhập Roblox tại redirect_uri bạn đã chỉ định. Trong yêu cầu, bạn nhận được code

  • Tham số code đứng đầu bằng một mã để xác nhận mà app có thể trao đổi cho một token truy cập từ máy chủ autorization. Hầu hết các ngôn ngữ back-end có các cách tiêu chuẩn để truy cập các tham số được xác nhận như đối tượng đã phân tích. Bạn sẽ c

  • Tham số state là một giá trị ẩn mà bạn đã cung cấp trong yêu cầu xác nhận. Bạn có thể sử dụng tham số này để duy trì trạng thái hoặc ngữ cảnh của quá trình xác nhận.

Ví dụ, bạn có thể nhận được một yêu cầu GET với địa chỉ URL sau đây nếu bạn đã xác định URL chuyển hướng của bạn là https://example.com/redirect .

Ví dụ URL đổi hướng

https://example.com/redirect?code=10c45PNuquKnFJ6pUcy5-fHkghEM6lSegm-7hj9mVEprub1dSDuStuKK_EAUXY7AHTD63xcnmvxSLthp-C8g3jzIGZVzuXSd20Y2dEYI9hx0LZmPg95ME4z2K03UheiZbroyXUjYyB3ReoMqobzDVPzyx6IS8kj2Uu-11Xq_0JiTYxtDatuqXRNIAmJT8gMJmbSyOLOP_vnDvbeMUiBsqCRrkTGVbWSwYSc8sTVVE-535kYdqQOgNjH1ffCoZLGl8YYxLnpb2CXJlRQPrcjkA&state=6789

Nếu đẩy khẩu trang không thành công, app của bạn nhận được một yêu cầu GET đến URL đích chỉ định với error , error_description và 1> state1> (nếu hiện hành) các biến.

  • Tham số error cho thấy lỗi OAuth 2.0 cụ thể mà xảy ra trong quá trình xác nhận.
  • Tham số error_description cung cấp thêm chi tiết của lỗi.
  • Tham số state giúp ứng dụng của bạn duy trì trạng thái trong trường hợp một sự cố xảy ra.

Trao đổi một mã quyền truy cập cho các thẻ truy cập

Khi bạn đã phân tích quyền truy cập code , trao đổi nó thành các token để truy cập những nguồn tài nguyên Roblox mong muốn:

  1. Yêu cầu một token truy cập và thay đổi token bằng cách gửi một yêu cầu POST đến đầu giao tiếp token. Yêu cầu phải bao gồm mã xác nhận, ID khách hàng và giá trị xác minh mã (PKCE) hoặc mật mã bí mật (không phải là PKCE)

  2. Phân tích các token được áp dụng từ câu trả lời nhận được. Token truy cập là hợp lệ trong vòng 15 phút. Lưu token nâng cấp an toàn, thường là trên bên máy chủ, so you can use it to get new tokens in the future.

    Trả lời của cầu cuối Token

    {
    "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IlBOeHhpb2JFNE8zbGhQUUlUZG9QQ3FCTE81amh3aXZFS1pHOWhfTGJNOWMiLCJ0eXAiOiJKV11234.eyJzdWIiOiIyMDY3MjQzOTU5IiwiYWlkIjoiM2Q2MWU3NDctM2ExNS00NTE4LWJiNDEtMWU3M2VhNDUyZWIwIiwic2NvcGUiOiJvcGVuaWQ6cmVhZCBwcm9maWxlOnJlYWQiLCJqdGkiOiJBVC5QbmFWVHpJU3k2YkI5TG5QYnZpTCIsIm5iZiI6MTY5MTYzOTY5OCwiZXhwIjoxNjkxNjQwNTk4LCJpYXQiOjE2OTE2Mzk2OTgsImlzcyI6Imh0dHBzOi8vYXBpcy5yb2Jsb3guY29tL29hdXRoLyIsImF1ZCI6IjcyOTA2MTAzOTc5ODc5MzQ5Nj1234.BjwMkC8Q5a_iP1Q5Th8FrS7ntioAollv_zW9mprF1ats9CD2axCvupZydVzYphzQ8TawunnYXp0Xe8k0t8ithg",
    "refresh_token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwia2lkIjoidGpHd1BHaURDWkprZEZkREg1dFZ5emVzRWQyQ0o1NDgtUi1Ya1J1TTBBRSIsInR5cCI6IkpXVCJ9..nKYZvjvXH6msDG8Udluuuw.PwP-_HJIjrgYdY-gMR0Q3cabNwIbmItcMEQHx5r7qStVVa5l4CbrKwJvjY-w9xZ9VFb6P70WmXndNifnio5BPZmivW5QkJgv5_sxLoCwsqB1bmEkz2nFF4ANLzQLCQMvQwgXHPMfCK-lclpVEwnHk4kemrCFOvfuH4qJ1V0Q0j0WjsSU026M67zMaFrrhSKwQh-SzhmXejhKJOjhNfY9hAmeS-LsLLdszAq_JyN7fIvZl1fWDnER_CeDAbQDj5K5ECNOHAQ3RemQ2dADVlc07VEt2KpSqUlHlq3rcaIcNRHCue4GfbCc1lZwQsALbM1aSIzF68klXs1Cj_ZmXxOSOyHxwmbQCHwY7aa16f3VEJzCYa6m0m5U_oHy84iQzsC-_JvBaeFCachrLWmFY818S-nH5fCIORdYgc4s7Fj5HdULnnVwiKeQLKSaYsfneHtqwOc_ux2QYv6Cv6Xn04tkB2TEsuZ7dFwPI-Hw2O30vCzLTcZ-Fl08ER0J0hhq4ep7B641IOnPpMZ1m0gpJJRPbHX_ooqHol9zHZ0gcLKMdYy1wUgsmn_nK_THK3m0RmENXNtepyLw_tSd5vqqIWZ5NFglKSqVnbomEkxneEJRgoFhBGMZiR-3FXMaVryUjq-N.Q_t4NGxTUSMsLVEppkTu0Q6rwt2rKJfFGuvy3s12345",
    "token_type": "Bearer",
    "expires_in": 899,
    "id_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IkNWWDU1Mi1zeWh4Y1VGdW5vNktScmtReFB1eW15YTRQVllodWdsd3hnNzgiLCJ0eXAiOiJKV11234.eyJzdWIiOiIyMDY3MjQzOTU5IiwibmFtZSI6ImxpbmtzZ29hdCIsIm5pY2tuYW1lIjoibGlua3Nnb2F0IiwicHJlZmVycmVkX3VzZXJuYW1lIjoibGlua3Nnb2F0IiwiY3JlYXRlZF9hdCI6MTYwNzM1NDIzMiwicHJvZmlsZSI6Imh0dHBzOi8vd3d3LnJvYmxveC5jb20vdXNlcnMvMjA2NzI0Mzk1OS9wcm9maWxlIiwibm9uY2UiOiIxMjM0NSIsImp0aSI6IklELnltd3ZjTUdpOVg4azkyNm9qd1I5IiwibmJmIjoxNjkxNjM5Njk4LCJleHAiOjE2OTE2NzU2OTgsImlhdCI6MTY5MTYzOTY5OCwiaXNzIjoiaHR0cHM6Ly9hcGlzLnJvYmxveC5jb20vb2F1dGgvIiwiYXVkIjoiNzI5MDYxMDM5Nzk4NzkzNDk2NCJ9.kZgCMJQGsariwCi8HqsUadUBMM8ZOmf_IPDoWyQY9gVX4Kx3PubDz-Q6MvZ9eU5spNFz0-PEH-G2WSvq2ljDyg",
    "scope": "openid profile"
    }

Tạo một cuộc gọi đến phương thức tài nguyên

Bây giờ bạn có thẻ quyền truy cập cần thiết, bạn có thể sử dụng nó để thực hiện các cuộc gọi được xác thực đến các phương thức tài nguyên. Bao gồm thẻ quyền truy cập trong trình duyệt của tất cả các yêu cầu API để xác thực họ.

Ví dụ, bạn có thể kiểm tra xem ứng dụng của bạn hoạt động đúng cách bằng cách đi qua toàn bộ quy trình xác nhận thẩm quyền và sau đó thực hiện một yêu cầu GET đến

Trả lời Dữ liệu Người dùng

{
"sub": "12345678",
"name": "Jane Doe",
"nickname": "robloxjanedoe",
"preferred_username": "robloxjanedoe",
"created_at": 1607354232,
"profile": "https://www.roblox.com/ users/ 12345678 / profile "
}