Thực hiện ứng dụng 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 xác nhận OAuth 2.0 với và không có PKCE, tùy thuộc vào việc khách hàng của bạn có bí mật hay công cộngkhai.

  • Khách hàng bí mật là các ứng dụng có khả năng giữ thông tin nhạy cảm, chẳng hạn như một trang web có thể lưu trữ và lấy lại bí mật một cách an toàn trên backend của nó.
  • Khách hàng công cộng 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à web.

Chúng tôi khuyên bạn nên dòng lưu lưu quyền xác thực OAuth 2.0 với PKCE cho tất cả khách hàng và yêu cầu nó cho khách hàng công cộng.

Để thực hiện dòng lưu lưu mã xác nhận, ứng dụng của bạn thực hiện các bước sau:

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

Các phần sau đây mô tả mỗi bước chi tiết hơn.

Tạo thử thách mã (chỉ cho PKCE)

Trước khi khởi động quá trình xác nhận, bạn cần tạo thử thách mã từ một trình xác minh mã.Bạn có thể sử dụng thư viện hoặc chức năng tích hợp sẵn trong ngôn ngữ lập trình của lựa chọn của bạn để tạo trình xác minh mã, tính toán hash và thực hiện mã hóa Base64 để tạo thử thách mã.

Khi tạo máy kiểm tra mã, chỉ sử dụng các ký tự chưa được dùng, bao gồm cả chữ viết hoa và chữ viết thường (A-Z, a-z), số thập phân (0-9), dấu gạch ngang (-), thời gian (.), dấu gạch dưới (_) và dấu chấm phẩy (~), với một chiều dài tối thiểu là 43 ký tự và một chiều dài tối đa là 128 ký tự.

Ví dụ sau đây cho thấy cách sử dụng Javascript để tạo một trình kiểm tra mã và tạo thử thách mã bằng cách sử dụng algoritma băm 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ả người xác minh mã và giá trị thử thách trong các bước sau.

Xây dựng URL ủy quyền

Để khởi động quá 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ố cần thiết:

  • client_id : ID khách hàng của ứng dụng của bạn được thu thập sau khi đăng ký ứng dụng của bạn .
  • redirect_uri : URL chuyển hướng của ứng dụng của bạn, điểm trở lại của ứng dụng của bạn.
  • scope : Phạm vi được yêu cầu xác định quyền truy cập mà ứng dụng của bạn cần trong danh sách tách không gian.
  • response_type : Đặt nó thành code để chỉ ra dòng mã xác nhận. Yêu cầu chỉ cho PKCE
  • code_challenge : Thử thách mã được tạo từ một trình xác minh mã.
  • code_challenge_method : Đặt giá trị tham số này thành S256 để chỉ ra rằng thử thách mã đã được biến đổi bằng cách sử dụng算法 SHA-256, phương pháp thử thách mã phổ biến và an toàn nhất.
  • state : Một giá trị ngẫu nhiên mờ ám, an toàn để duy trì trạng thái giữa yêu cầu và cuộc gọi lại. Yêu cầu chỉ cho non-PKCE
  • client_secret : Bí mật khách hàng của ứng dụng của bạn được thu thập sau khi đăng ký ứng dụng của bạn .Nếu bạn đang sử dụng xác thực với PKCE, bỏ qua tham số này.URL yêu cầu xác nhận của bạn phải được định dạng tốt, giống như trong ví dụ sau:
Ví dụ URL ủy quyền PKCE

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 dẫn qua dòng xác nhận. Nếu thành công, Roblox chuyển người dùng đến redirect_uri được chỉ định.

Xử lý cuộc gọi xác nhận quyền

Khi một dòng xác nhận thành công, ứng dụng của bạn nhận được một yêu cầu GET từ máy chủ xác nhận Roblox mà bạn đã đặc định tại redirect_uri.Trong yêu cầu, bạn nhận được code (mã xác nhận) và state (nếu bạn đã cung cấp một giá trị trước đó) tham số.

  • Tham số code bao gồm một mã xác nhận mà ứng dụng có thể trao đổi lấy một token truy cập từ máy chủ xác nhận.Hầu hết các ngôn ngữ máy chủ backend có cách tiêu chuẩn để truy cập các tham số truy vấn như các đối tượng được giải mã.Bạn sẽ cần phải lấy tham số code và sử dụng nó để trao đổi lấy token truy cập.

  • Tham số state là một giá trị mờ mịt mà bạn ban đầu 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 URL sau nếu bạn chỉ định chuyển hướng URI của bạn thành https://example.com/redirect.

Ví dụ URL chuyển hướng

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

Nếu xác thực thất bại, ứng dụng của bạn nhận được yêu cầu GET đến URL chuyển hướng được chỉ định với error , error_description , và state (nếu hiện hành) các tham số.

  • Tham số error chỉ ra lỗi OAuth 2.0 cụ thể xảy ra trong quá trình xác nhận.
  • Tham số error_description cung cấp thêm chi tiết về 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 thất bại.

Trao đổi một mã xác nhận cho token truy cập

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

  1. Yêu cầu một token truy cập và làm mới token bằng cách gửi một yêu cầu vào điểm cuối trao đổi token .Yêu cầu phải bao gồm mã xác nhận, ID khách hàng và giá trị kiểm tra mã (PKCE) hoặc bí mật khách hàng (non-PKCE) trong định dạng x-www-form-urlencoded.

  2. Phân tích các token áp dụng từ phản hồi nhận được.Token truy cập có giá trị trong 15 phút.Lưu token làm mới an toàn, thường ở phía máy chủ, để bạn có thể sử dụng nó để lấy các token mới trong tương lai.

    Ví dụ phản hồi điểm cuối của 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"
    }

Gọi một phương pháp tài nguyên

Bây giờ bạn đã có token truy cập cần thiết, bạn có thể sử dụng nó để thực hiện cuộc gọi xác thực đến các phương pháp tài nguyên.Bao gồm token truy cập trong tiêu đề của tất cả các yêu cầu API để xác thực chúng.

Ví dụ, bạn có thể kiểm tra xem chức năng của ứng dụng của bạn có hoạt động đúng không bằng cách đi qua toàn bộ dòng xác nhận và sau đó gửi một yêu cầu đến điểm thông tin người dùng với một token truy cập bằng một token truy cập.Hãy chắc chắn rằng bạn có openid hoặc cả hai openidprofile phạm vi trước khi gọi điểm cuối này.Nếu thành công, phản hồi từ điểm cuối này trông như thế này:

Ví dụ phản hồi thông tin 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"
}