Open Cloud, müşterileriniz gizli veya halka herkese açıkolup olmadığına bağlı olarak OAuth 2.0 yetkilendirme akışını destekler ve PKCE olmadan veya olmadan.
- Gizli müşteriler , arka plandaki gizlileri güvenli bir şekilde saklayabilen ve geri alabilen bir web sitesi gibi gizli bilgileri gizleyebilen uygulamalardır.
- Halka açık müşteriler mobil ve web tarayıcı uygulamaları gibi sırları saklayamayan uygulamalardır.
Tüm müşteriler için OAuth 2.0 yetkilendirme kod akışını PKCE ile gösteriyoruz ve halka açık müşteriler için bunu gerektiriyoruz.
Yetkilendirme kod akışını uygulamak için, uygulamanız aşağıdaki adımları gerçekleştirir:
- Bir kod doğrulayıcı ve kod meydan okuması oluştur (yalnızca PKCE).Bu, isteklerinize müşteri sırrı yerine bir meydan okuma dahil etmenizi sağlar, bu da güvenliği artırır.
- Doğru parametlerle birlikte yetkilendirme uç noktasına GET bir istek gönderin.
- Yetkilendirme yanıtını işle.İzin aldıktan sonra, uygulama yaratımsırasında belirttiğiniz URL'ye yönlendirme isteğinde Roblox'un izin kodunu kullanın.Daha sonra kullanım için yetkilendirme kodunu parçalayın.
- Yetkilendirme koduyla POST bir jeton uç noktasına bir istek gönderin.Başarılıysa, API çağrıları yapmak için erişim ve yenileme jetonları alırsınız.
- Erişmek istediğiniz kaynaklara göre referans belgelerine dayalı OAuth 2.0 doğrulamasını destekleyen herhangi bir Açık Bulut API'yi çağırın.
Aşağıdaki bölümler her adımı daha fazla derinlikte açıklar.
Bir kod meydan okuması oluştur (yalnızca PKCE için)
Yetkilendirme sürecini başlatmadan önce, bir kod doğrulayıcıdan bir kod meydan okuması oluşturmanız gerekir.Seçtiğiniz programlama diliyle kütüphaneleri veya dahili işlevleri kullanarak kod doğrulayıcıyı oluşturabilir, hash hesaplayabilir ve kod meydan okuması oluşturmak için Base64 kodlaması yapabilirsiniz.
Kod doğrulayıcıyı oluştururken, üst ve alt harfleri (A-Z, a-z), ondalık sayıları (0-9), tire (-), nokta (.), alt çizgi (_) ve tilde (~) dahil olmak üzere yalnızca rezerve edilmemiş karakterleri kullanın, minimum 43 karakter ve maksimum 128 karakter uzunluğuyla.
Aşağıdaki örnek, bir kod doğrulayıcı oluşturmak ve SHA-256 şifreleme algoritmasını kullanarak kod meydan okuması oluşturmak için Javascript'i nasıl kullanacağınızı gösterir:
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));
PKCE için, daha sonraki adımlarda hem kod doğrulayıcı hem de meydan okuma değerlerine ihtiyacınız var.
İzin URL'sini oluştur
Kullanıcı yetkilendirme sürecini başlatmak için, gerekli parametlerle bir yetkilendirme URL'si oluşturun:
- client_id : Uygulamanızın müşteri kimliği, uygulamanızı kaydettikten sonra alındı.
- redirect_uri : Uygulamanızın yeniden yönlendirme URI'si, uygulamanızın yeniden giriş noktası.
- scope : Uygulamanızın alan ayrımına ihtiyaç duyduğu erişim izinlerini tanımlayan talep edilen alanlar.
- response_type : Yetkilendirme kod akışını göstermek için ayarlayın code : PKCE'ye yalnızca gerekli
- code_challenge : Bir kod doğrulayıcıdan oluşturulan kod mücadelesi.
- code_challenge_method : Kod meydan okumasının SHA-256 algoritması kullanılarak dönüştürüldüğünü belirtmek için bu değer parametresini S256 olarak ayarlayın, en yaygın ve güvenli kod meydan okuma yöntemi.
- state : İstek ve geri çağrı arasındaki durumu korumak için opak, güvenli rastgele bir değer. Sadece PKCE olmayanlar için gerekli
- client_secret : Uygulamanızın müşteri sırrı, uygulamanızı kaydettikten sonra kaydedildi.PKCE ile doğrulama kullanıyorsanız, bu parametreyi atlayın.Yetkilendirme isteğiniz URL'si aşağıdaki örnekte olduğu gibi iyi biçimlendirilmelidir:
Örnek PKCE Yetkilendirme URL'si
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
Kullanıcılar URL'yi ziyaret ettiğinde, yetkilendirme akışından geçirilirler. Başarılı olursa, Roblox kullanıcıyı belirtilen redirect_uri 'ye yönlendirir.
Yetkilendirme yanıtı geri çağrılarını ele alma
Bir yetkilendirme akışı başarılı olduğunda, uygulamanız belirttiğiniz redirect_uri noktada Roblox yetkilendirme sunucusundan bir GET istek alır.İstekte, code (yetkilendirme kodu) ve state (daha önce bir değer sağladıysanız) parametleri alırsınız.
code çıkış değeri, uygulamanın yetkilendirme sunucusundan bir erişim jetonu için değiştirebileceği bir yetkilendirme kodu içerir.Çoğu arka plandaki sunucu dili, sorgu parametlerine şifrelenmiş olarak erişmenin standart yollarına sahiptir.Erişim jetonları için değişim yapmak için code çözümleme parametresini almanız ve kullanmanız gerekecek.
state paraçı, başlangıçta yetkilendirme talepsağladığınız opak bir değerdir.Bu değeri, yetkilendirme sürecinin durumunu veya konusunu korumak için kullanabilirsiniz.
Örneğin, yönlendirme URI'nizi olarak belirttiyseniz, aşağıdaki URL ile bir isteği alabilirsiniz, eğer yönlendirme URI'nizi olarak belirttiyseniz.
Örnek Yönlendirme URL'si
https://example.com/redirect?code=10c45PNuquKnFJ6pUcy5-fHkghEM6lSegm-7hj9mVEprub1dSDuStuKK_EAUXY7AHTD63xcnmvxSLthp-C8g3jzIGZVzuXSd20Y2dEYI9hx0LZmPg95ME4z2K03UheiZbroyXUjYyB3ReoMqobzDVPzyx6IS8kj2Uu-11Xq_0JiTYxtDatuqXRNIAmJT8gMJmbSyOLOP_vnDvbeMUiBsqCRrkTGVbWSwYSc8sTVVE-535kYdqQOgNjH1ffCoZLGl8YYxLnpb2CXJlRQPrcjkA&state=6789
Yetkilendirme başarısız olursa, uygulamanız belirtilen yeniden yönlendirme URL'sine GET , error ve error_description (uygulanabilir) parametrelere sahip bir state isteği alır.
- The error çıkış değeri, yetkilendirme sürecinde meydana gelen özel OAuth 2.0 hatasını gösterir.
- The error_description çözümleme parametresi hata ayrıntılarını ekler.
- The state çözüm parametresi, bir başarısızlık durumunda uygulamanızın durumu korumasına yardımcı olur.
Erişim jetonları için bir yetkilendirme kodunu değiştir
Yetkilendirmeyi parçaladıktan sonra, istenen Roblox kaynaklarına erişmek için jetonlarla değiştirin: code
Bir erişim jetonu ve yenileme jetonu talep edin ve POST bir token değişim uç noktasına göndererek istek gönderin.İstek, yetkilendirme kodunu, müşteri ID'sini ve kod doğrulayıcı değerini (PKCE) veya müşteri sırrını (PKCE olmayan) x-www-form-urlencoded formatında içermelidir.
Alınan yanıttan uygulanabilir jetonları parçalayın.Erişim jetonu 15 dakika boyunca geçerlidir.Yenileme jetonunu güvenli bir şekilde saklayın, genellikle sunucu tarafında, böylece gelecekte yeni jetonlar almak için kullanabilirsiniz.
Örnek Jeton Sonuç Cevabı{"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"}
Bir kaynak yöntemine çağrı yap
Artık gerekli erişim jetonuna sahip olduğunuzda, kaynak yöntemlerine doğrulanmış çağrılar yapmak için kullanabilirsiniz.Onları yetkilendirmek için tüm API isteklerinin başlığına erişim jetonunu dahil edin.
Örneğin, tüm yetkilendirme akışından geçerek uygulamanızın doğru çalışıp çalışmadığını test edebilir ve ardından bir erişim jetonu ile kullanıcı bilgi uç noktasına bir istek göndererek talep edebilirsiniz.Bu uç noktaya çağrı yapmadan önce openid veya her ikisinin de openid ve profile alanlarına sahip olduğunuzdan emin olun.Başarılı olursa, bu uç noktanın yanıtı şöyle görünür:
Örnek Kullanıcı Bilgi Yanıtı
{
"sub": "12345678",
"name": "Jane Doe",
"nickname": "robloxjanedoe",
"preferred_username": "robloxjanedoe",
"created_at": 1607354232,
"profile": "https://www.roblox.com/users/12345678/profile"
}