मैं यहां वर्णित सेवा खातों के लिए Google oAuth 2 को लागू करने का प्रयास कर रहा हूं: https://developers.google.com/accounts/docs/OAuth2ServiceAccount यूनिटीस्क्रिप्ट (या सी # - पर कोई फर्क नहीं पड़ता क्योंकि वे दोनों एक ही मोनो .NET का उपयोग करते हैं। वर्ग)।Google oAuth 2.0 (JWT टोकन अनुरोध)
मुझे यहां इसी तरह का विषय मिला है: Is there a JSON Web Token (JWT) example in C#? वेब-टोकन-जेडटी-उदाहरण-इन-सी लेकिन मुझे अभी भी सफलता नहीं मिली है।
सभी फिस्ट ऑफ़ द, मैं पैदा किया शीर्षक और claimset (कि सिर्फ गूगल दस्तावेज में की तरह हैं)
var header: String = GetJWTHeader();
var claimset: String = GetJWTClaimSet();
परिणाम (स्पष्टता के लिए नई लाइनों के साथ अलग) है:
{ "alg": "RS256", "typ": "जेडब्ल्यूटी"}
{ "iss": "425466719070-1dg2rebp0a8fn9l02k9ntr6u5o4a8lp2.apps.googleusercontent.com",
+०१२३५१६४१०६"गुंजाइश": "https://www.googleapis.com/auth/prediction",
"aud": "https://accounts.google.com/o/oauth2/token",
"exp": +१३४०२२२३१५,
"प.जा.": +१३४०२१८७१५}
बेस -64 एन्कोडिंग विधियां:
public static function Base64Encode(b: byte[]): String {
var s: String = Convert.ToBase64String(b);
s = s.Replace("+", "-");
s = s.Replace("/", "_");
s = s.Split("="[0])[0]; // Remove any trailing '='s
return s;
}
public static function Base64Encode(s: String): String {
return Base64Encode(Encoding.UTF8.GetBytes(s));
}
तब मैं एक हस्ताक्षर कर रहा हूं ure।
var to_sign: byte[] =
Encoding.UTF8.GetBytes(Base64Encode(header) + "." + Base64Encode(claimset));
var cert: X509Certificate2 =
new X509Certificate2(google_pvt_key.ToArray(), "notasecret");
var rsa: RSACryptoServiceProvider = cert.PrivateKey;
var sgn: String = Base64Encode(rsa.SignData(to_sign, "SHA256"));
var jwt: String = Base64Encode(header) + "." + Base64Encode(claimset) +
"." + sgn;
और फिर अनुरोध बनाने:
var url: String = "https://accounts.google.com/o/oauth2/token";
var form: WWWForm = new WWWForm();
form.AddField("grant_type", "assertion");
form.AddField("assertion_type", "http://oauth.net/grant_type/jwt/1.0/bearer");
form.AddField("assertion", jwt);
var headers: Hashtable = form.headers;
headers["Content-Type"] = "application/x-www-form-urlencoded";
var www: WWW = new WWW(url, form.data, headers);
और यह सब मुझे मिलता है कि "त्रुटि 400: गलत अनुरोध"।
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9:
इनकोडिंग डेटा (पंक्ति विराम स्पष्टता के लिए जोड़ा) की तरह दिखता है।
eyJpc3MiOiI0MjU0NjY3MTkwNzAtMWRnMnJlYnAwYThmbjlsMDJrOW50cjZ1NW80YThscDIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsImV4cCI6MTM0MDIyMjMxNSwiaWF0IjoxMzQwMjE4NzE1fQ।
lIFg7-Og_BcC5qpICLt7USwGIHUOz-vV4ADNq0AWhuRtsvFrbZn5mxk4n9r5qU66q4reTVVAtuW06DeGsdcBMNgEdIMvN6VuYQybs64p9mqrfECBYxO1FWHbUG-2On1IpowybEsRRUjZfp0jFuEY7SLE3XRaXan0k5zmejcvLQo
मैं यह पता लगाने की क्या गलत है की कोशिश कर दो दिन बिताया है, लेकिन मैं नहीं देख सकता।
इसके अलावा, मुझे कोई उपयुक्त दस्तावेज़ीकरण और उदाहरण नहीं मिल सका।
मैं सिर्फ एक टोकन प्राप्त करने की कोशिश कर रहा हूं।
- क्या मैं बाइट्स को सही तरीके से हस्ताक्षर कर रहा हूं?
- दावेसेट में "स्कोप" पैरामीटर कैसा दिखना चाहिए? मैंने कोशिश की है "https://www.googleapis.com/auth/devstorage.readonly" और "https://www.googleapis.com/auth/prediction"।
- क्या "जारी" पैरामीटर बराबर होना चाहिए? क्लाइंट-आईडी या ई-मेल पता? (दोनों की कोशिश की)
- मेरी गलती को जानने के तरीके क्या हैं?
- क्या सेवा अनुप्रयोग के लिए कोई सी # पुस्तकालय हैं (इंस्टॉल किए गए ऐप्स या क्लाइंट लॉगिन के लिए नहीं)?
मैं पागल हो रही है ... यह काम करने के लिए है, लेकिन यह नहीं है ...: -/
मुझे सी # में सेवा खाता प्रमाणीकरण को भी लागू करने में कठिन समय हो रहा है! क्या आप मेरे लिए पुष्टि कर सकते हैं कि आपने अपने उदाहरण में दिखाए गए अनुदान_ प्रकार और assertion_type फ़ील्ड्स का सफलतापूर्वक उपयोग किया है? धन्यवाद – Nick