سؤال

صافي جوجل واجهات برمجة التطبيقات من أجل مصادقة عبر أوث واستخدام واجهات برمجة التطبيقات محرك جوجل.

على وجه التحديد ، أريد استخدام رمز تحديث قمت بتخزينه بالفعل من أجل استخدامه لإنشاء مثيل لخدمة غوغلدريف.

لقد وجدت عينات مثل https://code.google.com/p/google-api-dotnet-client/source/browse/Tasks.SimpleOAuth2/Program.cs?repo=samples

يبدو أن استخدام " غوغلويبوثوريزاتيونبروكر.أوثوريزاسينك " لكنني لست متأكدا من كيفية استخدام هذه الطريقة مع رمز تحديث بدلا من أسرار العميل التي يبدو أنك تغذيها في هذا المثال.

هل كانت مفيدة؟

المحلول

إذا فهمت لك بشكل صحيح، فأنت تسأل كيف يمكنك إنشاء خدمة Google جديدة، بناء على رمز تحديث موجود.

لذلك، يمكنك القيام بما يلي:

giveacodicetagpre.

ثم يمكنك تمرير بيانات الاعتماد الخاصة بك إلى تهيئة الخدمة.

عن طريق القيام أعلاه، googleauthorizationcodeflow سيحصل على رمز وصول جديد يعتمد عليك تحديث الرمز المميز والعميل.

لاحظ أنه يجب أن يكون لديك أسرار عميل هنا، دون ذلك، لن تتمكن من الحصول على رمز وصول.

نصائح أخرى

client_secrets.json يحتوي على معرف العميل وسرك العميل (الذي يحتوي على معلومات OAuth 2.0 الخاصة بك للتطبيق الخاص بك).

أعتقد أن هذه المقالة ستشرح أفضل كيف يمكنك OAuth 2.0 للوصول إلى Apps Apps خاصة إذا كنت تقوم ببناء تطبيق ويب.

href="https://developers.google.com/accounts/docs/oauth2webserver" rel="nofollow noreferrer"> https://developers.google.com/accounts/docs/oauth2Webserver

إذا كنت مهتما بمثال ترميز، فهناك واحد في Stackoverflow: API + Google+: كيف يمكنني استخدام RefreshTokens لتجنب طلب الوصول في كل مرة يطلق تطبيقي؟

يتطلب GoogleWebaurezoRizerBroperizer أنك ترسلها إنهاء IDATASTORE في هذه الحالة يتم إرسال FiledAtAstore.يخزن FiledAtAstore البيانات في٪ Appdata٪.إذا كنت ترغب في استخدام RefreshToken، فقد قمت بحفظه في مكان آخر، فأنت بحاجة إلى إنشاء الانتخابات الخاصة بك من Idatastore.

الرمز لقاعدة البيانات الفعلية أنا طويلة قليلا للنشر هنا. http://daimto.com/google-oauth2-csharp/

يمكنك استخدامها تماما كما لو كنت سوف FiledAtAstore

giveacodicetagpre.

هناك مشروع نموذج مرتبط بهذا البرنامج التعليمي.

لاستخدام رمز التحديث:

var init = new GoogleAuthorizationCodeFlow.Initializer
{
    ClientSecrets = new ClientSecrets
    {
        ClientId = "OAuth_Client_ID_From_GoogleAPI",
        ClientSecret = "OAuth_Client_Secret"
    },
    Scopes = new string[] {"MY_SCOPES"}
};
var token = new TokenResponse { RefreshToken = "MY_REFRESH_TOKEN" };
var credential = new UserCredential(new Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow(init), "", token);

//init your Google API service, in this example Google Directory
var service = new DirectoryService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "",
});

ماذا لو لم يكن لديك رمز تحديث?أسهل هو اتباع التعليمات على مستندات سك جوجل.أولا تحميل بيانات الاعتماد الخاصة بك من مشروع أبي جوجل.اسم الملف credentials.json.ثم قم بتشغيل التعليمات البرمجية:

using (var stream =
    new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
{
    // The file token.json stores the user's access and refresh tokens, and is created
    // automatically when the authorization flow completes for the first time.
    string credPath = "token.json";
    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        Scopes,
        "user",
        CancellationToken.None,
        new FileDataStore(credPath, true)).Result;
    Console.WriteLine("Credential file saved to: " + credPath);
}

يجب أن يؤدي هذا إلى إنشاء رمز مجلد.جسون والمجلد الداخلي هو ملف جسون آخر يحتوي على تحديث.

{
    "access_token" : "asdf",
    "token_type" : "Bearer",
    "expires_in" : 3600,
    "refresh_token" : "XXX",
    "scope" : "https://www.googleapis.com/auth/admin.directory.user.readonly",
    "Issued" : "2019-02-08T12:37:06.157-08:00",
    "IssuedUtc" : "2019-02-08T20:37:06.157Z"
}

أنا أفضل عدم استخدام غوغلويبوثوريزاتيونبروكر لأنه السيارات تطلق متصفح الويب عندما لم يتم العثور على الرمز المميز.أنا أفضل طريقة المدرسة القديمة للحصول على رمز التحديث عن طريق رمز الوصول.هذا هو مماثل جدا لاستخدام جوجل OAuthUtil.CreateOAuth2AuthorizationUrl و OAuthUtil.GetAccessToken في واجهة برمجة تطبيقات أووث القديمة من غوغل.

var a = new Google.Apis.Auth.OAuth2.Flows.GoogleAuthorizationCodeFlow.Initializer
{
    ClientSecrets = new ClientSecrets
    {
        ClientId = "asdf",
        ClientSecret = "hij"
    },
    Scopes = Scopes
};
var flow = new Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow(a);
var url = flow.CreateAuthorizationCodeRequest(GoogleAuthConsts.InstalledAppRedirectUri).Build().AbsoluteUri;
Console.WriteLine("Go to this URL and get access code: " + url);

Console.Write("Enter access code: ");
var code = Console.ReadLine();

Console.WriteLine("Fetching token for code: _" + code + "_");
var r = flow.ExchangeCodeForTokenAsync("user", code, GoogleAuthConsts.InstalledAppRedirectUri, CancellationToken.None).Result;
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(r));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top