83429


# やりたいこと

discordのOAuth2を使用してユーザーの情報を取得してみたい

# 発生している問題

コードを実行したら`{ message: '401: Unauthorized', code: 0 }`これがconsoleに表示される

# コード

[code]

    const fetch = require('node-fetch');
    const express = require('express');
    const router = express.Router();
    
    router.get('/', async ({ query }, response) => {
        const { code } = query;
    
        if (code) {
            try {
                const oauthResult = await fetch('https://discord.com/api/oauth2/token', {
                    method: 'POST',
                    body: new URLSearchParams({
                        client_id: '',
                        client_secret: '',
                        code,
                        grant_type: 'authorization_code',
                        redirect_uri: `https://oauth.aiueominato1111.repl.co`,
                        scope: 'identify',
                    }),
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded',
                    },
                });
    
                const oauthData = await oauthResult.json();
    
                const userResult = await fetch('https://discord.com/api/users/@me', {
                    headers: {
                        authorization: `${oauthData.token_type} ${oauthData.access_token}`,
                    },
                });
    
                console.log(await userResult.json());
            } catch (error) {
                // NOTE: An unauthorized token will not throw an error;
                // it will return a 401 Unauthorized response in the try block above
                console.log(error);
            }
        }
    
        return response.render('login', { root: '.' });
    });
    module.exports = router;
    
[/code]


CC BY-SA 4.0
2021-11-03T12:11:45.573
83413
2021-11-04T12:50:27.550
48118
question
node.js oauth discord
discordのOAuth2で 401: Unauthorized とconsoleに表示される


tokenエンドポイントへのリクエストで `401` が返るということはクライアント認証に失敗しているのだと思います。

`client_id`, `client_secret` に設定している値を見直してみてください。  
(他のパラメータが誤っている場合には(Discordサービスの実装にも依りますが、典型的には) `400` が返ると思われます)

参考:

  * [The OAuth 2.0 Authorization Framework](https://openid-foundation-japan.github.io/rfc6749.ja.html)
    * [3.2.1. クライアント認証](https://openid-foundation-japan.github.io/rfc6749.ja.html#token-endpoint-auth)
    * [5.2. エラーレスポンス](https://openid-foundation-japan.github.io/rfc6749.ja.html#token-errors)


CC BY-SA 4.0
2021-11-04T12:50:27.550
83429
2021-11-04T12:50:27.550
2808
83413
answer