اذهب إلى المحتوى

السؤال

نشر

في تسجيل الدخول العادي الذي اقوم به بطلب بيانات المستخدم يدويا عند انتهاء المستخدم من تسجيل الدخول اقوم بإنشاء access-token و refresh-token خاص بالعميل ، هل عند تسجيل الدخول عن طريق قوقل اقوم بعمل refresh-token للمستخدم ؟ وهل هناك طريقة مختلفة لانشاء refresh-token للمستخدم عن طريق google sign in ام انه نفس انشاء ال token العادي ؟ 

Recommended Posts

  • 0
نشر

يمكنك إنشاء وتوقيع JWT من طرف الخادم لديك لطلب JWT جديد من خادم جوجل، وبعد الحصول على JWT من خادم جوجل. أما بالنسبة لـ refresh token فيجب عليك وضع الخيار access_type وإعطائه القيمة offline ليتم الرد بـ refresh token على طلب التحقق كالتالي (مثال باستخدام node.js):

const authorizationUrl = oauth2Client.generateAuthUrl({
  access_type: 'offline',
  scope: scopes,
  include_granted_scopes: true
});

وعند انتهاء مدة صلاحية access token في الطلب، يتم إعطائك refresh token مباشرةً من قبل خادم جوجل لتستخدمه وتخزّنه في تطبيقك (مثال باستخدام مكتبة oauth2Client):

oauth2Client.on('tokens', (tokens) => {
  if (tokens.refresh_token) {
    // هنا نضع الشيفرة البرمجية المسؤولة عن تخزين الرمز
  }
});

يمكنك الاطلاع على مزيد من التفاصيل حول آلية عمل refresh token في خوادم جوجل من خلال التوثيق الرسمي لـ Google Identity قد تختلف طريقة تطبيق الآلية السابقة حسب لغات البرمجة التي تستخدمها وأين تستخدم آلية توثيق جوجل من خلال خادم الويب أم من طرف المستخدم بشكل مباشر.

  • 0
نشر
بتاريخ 57 دقائق مضت قال Sam Ahw:

يمكنك إنشاء وتوقيع JWT من طرف الخادم لديك لطلب JWT جديد من خادم جوجل، وبعد الحصول على JWT من خادم جوجل. أما بالنسبة لـ refresh token فيجب عليك وضع الخيار access_type وإعطائه القيمة offline ليتم الرد بـ refresh token على طلب التحقق كالتالي (مثال باستخدام node.js):


const authorizationUrl = oauth2Client.generateAuthUrl({
  access_type: 'offline',
  scope: scopes,
  include_granted_scopes: true
});

وعند انتهاء مدة صلاحية access token في الطلب، يتم إعطائك refresh token مباشرةً من قبل خادم جوجل لتستخدمه وتخزّنه في تطبيقك (مثال باستخدام مكتبة oauth2Client):


oauth2Client.on('tokens', (tokens) => {
  if (tokens.refresh_token) {
    // هنا نضع الشيفرة البرمجية المسؤولة عن تخزين الرمز
  }
});

يمكنك الاطلاع على مزيد من التفاصيل حول آلية عمل refresh token في خوادم جوجل من خلال التوثيق الرسمي لـ Google Identity قد تختلف طريقة تطبيق الآلية السابقة حسب لغات البرمجة التي تستخدمها وأين تستخدم آلية توثيق جوجل من خلال خادم الويب أم من طرف المستخدم بشكل مباشر.

عندما يقوم المستخدم بتسجيل الدخول عن طريق قوقل اقوم بإرسال id token الى ال server وعندها اقوم بتوثيقه عن طريق هذه الشيفرات ..

var token = req.body.token 

const ticket = await client.verifyIdToken({
        idToken: token,
        audience: CLIENT_ID, 
    });
    const payload = ticket.getPayload();

 res.cookie('identity' , token , { expires: new Date(Date.now() + 999999999999) });
 res.cookie('is-auth' , true)

هذا ما اقوم به ..

هل يجب ان استخدم refresh token في حالتي هذه ؟ ليس لدي خبرة في التعامل مع google api

  • 0
نشر

استخدام refresh token اختياري وليس إجباري، يعتمد على آلية عمل تطبيقك أو موقعك.

في حال كانت مدة انتهاء صلاحية access token قصيرة، يفضّل استخدامه لتحسين تجربة المستخدم وعدم إجباره على إعادة عملية تسجيل الدخول خلال فترات زمنية قصيرة. أما في حال كانت المدّة طويلة لشهر أو أكثر يمكنك الاستغناء عنه ولن يؤثر ذلك على آلية التحقق والتوثيق.

  • 0
نشر
بتاريخ 10 ساعات قال Sam Ahw:

استخدام refresh token اختياري وليس إجباري، يعتمد على آلية عمل تطبيقك أو موقعك.

في حال كانت مدة انتهاء صلاحية access token قصيرة، يفضّل استخدامه لتحسين تجربة المستخدم وعدم إجباره على إعادة عملية تسجيل الدخول خلال فترات زمنية قصيرة. أما في حال كانت المدّة طويلة لشهر أو أكثر يمكنك الاستغناء عنه ولن يؤثر ذلك على آلية التحقق والتوثيق.

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

html page 

 <script src="https://accounts.google.com/gsi/client" async defer></script>


<div id="g_id_onload"
     data-client_id="743547246544-5f2v4jrmg8s9abjq1ogi43revha82mfs.apps.googleusercontent.com"
     data-context="signin"
     data-callback="handleCredentialResponse"
     data-auto_select="true"
     data-nonce="">
                        </div>
                        <div class="g_id_signin"
     data-type="standard"
     data-shape="rectangular"
     data-theme="outline"
     data-text="signin_with"
     data-size="large"
     data-locale="ar"
     data-logo_alignment="left">
                        </div>       

js file 

 function handleCredentialResponse(tokenId) {

        console.log(tokenId)

    $.ajax(`${serverAddress}/user/googleLogin`,{
        type: 'POST',
        xhrFields: { withCredentials: true },
        crossDomain: true,
        data: {token: tokenId.credential},
       success: (res) => {
           alert('success')
       },
        error: (er) => {
           
        }
    })
}

node js 

var token = req.body.token

  async function verify() {
    const ticket = await client.verifyIdToken({
        idToken: token,
        audience: CLIENT_ID, 
    });
    const payload = ticket.getPayload();


      User.findOne({email: payload.email})
      .then(user => {
        if (user){
          res.cookie('identity' , token , { expires: new Date(Date.now() + 999999999999) });
          res.status(300).send()
        } else {
          res.status(200).send()
        }
        
      }).catch(err => {
        console.log(err)
      })

    }



    verify().catch(console.error);

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...