【问题标题】:Authorization via battle.net通过战网授权
【发布时间】:2020-01-05 05:32:06
【问题描述】:

我尝试通过战网在我的网站上创建身份验证。这是我第一次使用 OAuth。有文档https://develop.battle.net/documentation/api-reference/oauth-api

现在我可以获取代码并希望通过代码获取访问令牌。我提供凭据。使用 Koa.js。

const { code } = ctx.query;
  const redirect_uri = 'http://127.0.0.1:3000/auth';
  const client_id = '0010d...25f44b31...5c34b12f4af7'
  const secret = 'MY_VERY_SECRET_CODE';
  const scope = 'wow.profile';
  if( !code ) ctx.redirect(`https://us.battle.net/oauth/authorize?response_type=code&client_id=${client_id}&redirect_uri=${redirect_uri}&scope=${scope}`);

  try {
    const { data } = await axios.post('https://us.battle.net/oauth/token', {
      grant_type: 'authorization_code',
      code,
      redirect_uri,
      client_id
    }, {
      auth: {
        username: client_id,
        password: secret
      }
    })
    console.log(data);
  } catch (e) {
    console.error(e)
  }


  ctx.body = {
    message: 'OK',
  }

重定向有效,我得到了code。但是我应该如何使用获得的code 构建查询?但是我得到了错误

 data:
      { error: 'invalid_request',
        error_description: 'Missing grant type' } },

【问题讨论】:

    标签: javascript node.js oauth openid battlenet-api


    【解决方案1】:

    我应该使用表单数据类型。

    formData.append('grant_type', 'authorization_code');
          formData.append('code', code);
          formData.append('redirect_uri', redirect_uri);
          formData.append('client_id', client_id);
    
          const { data: authData } = await axios.post('https://eu.battle.net/oauth/token', 
            formData,
            {
              auth: {
                username: client_id,
                password: secret,
              },
              headers: {
                'Content-Type': `multipart/form-data; boundary=${formData._boundary}`,
              }  
            },
          )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-19
      • 2016-11-27
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 2018-07-21
      相关资源
      最近更新 更多