使用后端服务器进行验证

如果您在一个与后端服务器通信的应用上使用now.gg登录,您可能需要在服务器上鉴别当前登录的用户。

如何使用后端服务器对登录的用户进行安全鉴别:

  • 在用户登录成功后,使用HTTPS将用户的ID令牌(ID token)发送到您的服务器。
  • 在服务器上,使用验证令牌API(Verify Token API)来验证ID令牌的完整性,并使用包含在令牌内的用户信息来创建一个新的账户或者建立一个会话。

提醒

  • 修改过的客户端应用可以将任意用户ID发送到您的服务器来假扮用户。因此,您的后端服务器一定不要接受明文的用户ID,比如那些使用 userData.getUserId() 方法取得的用户ID。
  • 在服务器端,您应使用可验证的ID令牌verifiable ID tokens)以安全获取到已登录用户的用户ID。

发送ID令牌到您的服务器

用HTTPS POST请求向 tokensignin API发送ID令牌到您的后端服务器:

   HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("https://yourbackend.example.com/tokensignin");
  
    try {
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
       nameValuePairs.add(new BasicNameValuePair("idToken", idToken));
       httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

       HttpResponse response = httpClient.execute(httpPost);
       int statusCode = response.getStatusLine().getStatusCode();
       final String responseBody = EntityUtils.toString(response.getEntity());
       Log.i(TAG, "Signed in as: " + responseBody);
     } catch (ClientProtocolException e) {
       Log.e(TAG, "Error sending ID token to backend.", e);
     } catch (IOException e) {
       Log.e(TAG, "Error sending ID token to backend.", e);
     }

验证ID令牌的完整性

通过HTTPS POST,在您的后端服务器上接收到ID令牌之后,您必须使用 验证令牌API 来验证令牌的完整性。

     
    import requests
     try:
        url = "https://now.gg/accounts/oauth2/v1/verify-token"
        payload={
         "token_type": "id_token",
         "token": < id_token > ,
         "client_id": < your_oauth_client_id >
        }
        headers = {
          'Content-Type': 'application/json'
        }
        response = requests.request("POST", url, headers=headers, data=json.dumps(payload))
         print(response.text)
         #token verified
     except:
         #token not verified
         pass 
     
    var axios = require('axios');
     var config = {
         method: 'post',
         url: 'https://now.gg/accounts/oauth2/v1/verify-token',
         headers: {
             'Content-Type': 'application/json'
         },
         data: {
             "token_type": "id_token",
             "token": < id_token > ,
             "client_id": < your_oauth_client_id >
         }
     };

     axios(config)
         .then(function (response) {
             console.log(JSON.stringify(response.data));
         })
         .catch(function (error) {
             console.log(error);
         });

创建账户或会话

在您完成令牌验证之后,检查该用户是否已经存在于您的用户数据库中。

  • 如果该用户在您的用户数据库中,为用户建立一个经过认证的会话。
  • 如果该用户未存在您的用户数据库中,从您所接收到的ID令牌的负载信息里创建一个新的用户记录,并为用户建立会话。

注意:当在您的应用中检测到一个新创建的用户,且在您的数据库中保存此用户时,您可以获取任何您需要的该用户的其它个人资料。

×

文档版本 1.0

文本已复制到剪贴板
copyLinkText
有疑问?请通过以下方式联系我们: dev-support@now.gg