discord Oauth2 访问令牌未定义

     2023-03-14     47

关键词:

【中文标题】discord Oauth2 访问令牌未定义【英文标题】:discord Oauth2 access token undefined 【发布时间】:2021-05-05 23:54:55 【问题描述】:

所以我正在尝试创建一个不和谐的机器人仪表板,并且我包括一个不和谐的 Oauth2 来获取用户信息。我的 Discord Oauth2 有效,但是在授权后,它将我重定向到主页,但 URL 有 token=undefined 。控制台确实记录“它有效!”。如何修复未定义的访问令牌?

http://localhost:3000/?token=undefined

var path = require('path');
const express = require('express');
const fetch = require('node-fetch');
const app = express();
require('dotenv').config();
const btoa = require('btoa');
const  catchAsync  = require('./utils.js')

const CLIENT_ID = process.env.CLIENT_ID;
const CLIENT_SECRET = process.env.CLIENT_SECRET;
const redirect = encodeURIComponent('http://localhost:3000/callback');

...

app.get('/login', (req, res) => 
    res.redirect(`https://discord.com/api/oauth2/authorize?client_id=$CLIENT_ID&redirect_uri=$redirect&response_type=code&scope=identify%20email%20guilds`);
  );

app.get('/callback', catchAsync(async (req, res) => 
    if (!req.query.code) throw new Error('NoCodeProvided');
    const code = req.query.code;
    const creds = btoa(`$CLIENT_ID:$CLIENT_SECRET`);
    const response = await fetch(`https://discordapp.com/api/oauth2/token?grant_type=authorization_code&code=$code&redirect_uri=$redirect`,
      
        method: 'POST',
        headers: 
          Authorization: `Basic $creds`,
        ,
      );
    const json = await response.json();
    console.log("it works!")
    res.redirect(`/?token=$json.access_token`);
  ));
app.listen(3000)

【问题讨论】:

fetch 总是解析收到的任何数据,即使它是 404 或 500,为了检查是否有任何错误,您必须添加 if (!response.ok) // log error... 。 AFAIK,/token 不允许 GET 查询,您是否尝试将数据放入正文? @HoangDao 看来是发送请求的方式有问题,所以我改了格式,将CLIENT_ID、CLIENT_SECRET、redirect_uri、code等保存到变量中,作为URLSearchParams发送现在它可以工作了 【参考方案1】:

回调链接的设置方式似乎有问题,所以我将其更改为如下所示,并且可以正常工作。

app.get('/callback', catchAsync(async (req, res) => 

    const data = 
        client_id: CLIENT_ID,
        client_secret: CLIENT_SECRET,
        grant_type: 'authorization_code',
        redirect_uri: redirect,
        code: req.query.code,
        scope: ['identify', 'email', 'guilds'],
    ;
    
    const response = await fetch('https://discord.com/api/oauth2/token', 
    method: 'POST',
    body: new URLSearchParams(data),
    headers: 
        'Content-Type': 'application/x-www-form-urlencoded',
    
    )

    const json = await response.json();

    const fetchDiscordUserInfo = await fetch('http://discordapp.com/api/users/@me', 
  headers: 
    Authorization: `Bearer $json.access_token`,
  
);
const userInfo = await fetchDiscordUserInfo.json();

    res.redirect('http://localhost:3000/dashboard')

console.log(userInfo);

【讨论】:

Discord Oauth2 访问令牌“不支持授予类型无”

】DiscordOauth2访问令牌“不支持授予类型无”【英文标题】:DiscordOuath2AccessToken\'GranttypeNoneisnotsupported\'【发布时间】:2021-07-2516:04:50【问题描述】:我正在尝试为我的网站制作一个不和谐的登录系统,它是用express制作的。我已经... 查看详情

错误 401:未经 Oauth2 授权用于 Discord

】错误401:未经Oauth2授权用于Discord【英文标题】:Error401:UnauthorizedwithOauth2forDiscord【发布时间】:2021-10-0111:44:49【问题描述】:我目前正在使用PHP中的Oauth2API通过Discord开发连接系统。目前我可以获得获取访问令牌的代码。我获... 查看详情

未找到访问令牌受众中的 OAuth2 客户端 ID

】未找到访问令牌受众中的OAuth2客户端ID【英文标题】:OAuth2clientidinaccesstokenaudienceisnotfound【发布时间】:2021-02-1809:31:31【问题描述】:首先,我很抱歉我的英语不好。我使用Expo创建了一个Android应用程序。我通过Firebase实现了Goo... 查看详情

OAuth 2.0 访问令牌未加密?

】OAuth2.0访问令牌未加密?【英文标题】:OAuth2.0Accesstokenisnotencrypted?【发布时间】:2016-03-1513:53:28【问题描述】:我正在使用System.IdentityModel.Tokens.jwt库作为jwt访问令牌,在我调用WriteToken后,我可以在另一个程序中从ReadToken取回... 查看详情

如何撤销 Discord OAuth2.0 中的令牌?

】如何撤销DiscordOAuth2.0中的令牌?【英文标题】:HowtorevokeatokeninDiscordOAuth2.0?【发布时间】:2020-09-0413:34:34【问题描述】:为了使用Discord的API,我需要一个令牌,并打开一个链接,例如https://discordapp.com/api/oauth2/authorize?client_id=&am... 查看详情

API 未获取 oAuth2 令牌

】API未获取oAuth2令牌【英文标题】:oAuth2TokennotpickedupbyAPI【发布时间】:2017-04-0413:40:33【问题描述】:不久前我做了一个项目,使用oAuth2和OpenID进行访问控制,我设法让它工作得很好,但现在我开始了一个新项目,我必须再次实... 查看详情

如何在服务器端验证我的自定义 Oauth2 访问令牌

】如何在服务器端验证我的自定义Oauth2访问令牌【英文标题】:HowcanIvalidatemycustomOauth2accesstokeninserver-side【发布时间】:2014-06-1507:40:33【问题描述】:publicclassSimpleAuthorizationServerProvider:OAuthAuthorizationServerProviderpublicoverrideasyncTaskGra 查看详情

Spring Boot 2 OIDC(OAuth2)客户端/资源服务器未在 WebClient 中传播访问令牌

】SpringBoot2OIDC(OAuth2)客户端/资源服务器未在WebClient中传播访问令牌【英文标题】:SpringBoot2OIDC(OAuth2)client/resourceservernotpropagatingtheaccesstokenintheWebClient【发布时间】:2020-04-1603:03:42【问题描述】:SampleprojectavailableonGithub我已经成... 查看详情

带有访问/刷新令牌的 Spring Boot OAuth2 SSO 未正确存储在数据库中

】带有访问/刷新令牌的SpringBootOAuth2SSO未正确存储在数据库中【英文标题】:SpringBootOAuth2SSOwithaccess/refreshtokensisnotstoredinadatabasecorrectly【发布时间】:2016-04-2618:44:03【问题描述】:基于此示例https://spring.io/guides/tutorials/spring-boot-oau... 查看详情

Oauth2/Openid 连接。如何撤销未知的访问/刷新令牌

】Oauth2/Openid连接。如何撤销未知的访问/刷新令牌【英文标题】:Oauth2/OpenidConnect.Howtorevokeunknownaccess/refreshtokens【发布时间】:2015-05-1112:53:00【问题描述】:在Oauth或OpenidConnect中,假设攻击者获取了访问或刷新令牌,并清除了浏... 查看详情

如果 OAuth2 访问令牌可以被盗,为啥假设刷新令牌也可以被盗是不安全的?

】如果OAuth2访问令牌可以被盗,为啥假设刷新令牌也可以被盗是不安全的?【英文标题】:IfanOAuth2accesstokencanbestolen,whyisn\'titsafetoassumethatarefreshtokencanbestolentoo?如果OAuth2访问令牌可以被盗,为什么假设刷新令牌也可以被盗是不安... 查看详情

googleapis oauth2 令牌 API 未返回 refresh_token

】googleapisoauth2令牌API未返回refresh_token【英文标题】:googleapisoauth2tokenAPInotreturningrefresh_token【发布时间】:2017-11-1422:46:18【问题描述】:我正在尝试生成access_token和refresh_token来访问google电子表格API。我使用了APIhttps://www.googleapis.... 查看详情

刷新 OAuth2 访问令牌的正确范例

】刷新OAuth2访问令牌的正确范例【英文标题】:ProperparadigmforrefreshingOAuth2accesstoken【发布时间】:2012-08-2303:08:16【问题描述】:我正在使用一个使用OAuth2的API,它提供了一个在3600秒后过期的访问令牌,并提供了一个刷新令牌。最... 查看详情

Discord guilds.join 导致错误请求

】Discordguilds.join导致错误请求【英文标题】:Discordguilds.joinresultinginBadRequest【发布时间】:2020-04-2214:16:07【问题描述】:我正在尝试使用Node的请求模块将成员添加到我的公会。访问令牌是通过Discord的OAuth2系统检索的。该令牌提... 查看详情

为啥不同时发送访问和刷新令牌 (OAuth2)?

】为啥不同时发送访问和刷新令牌(OAuth2)?【英文标题】:Whynotsendaccessandrefreshtokenssimultaneously(OAuth2)?为什么不同时发送访问和刷新令牌(OAuth2)?【发布时间】:2016-12-2207:01:04【问题描述】:为什么客户端不能简单地为每个授权请... 查看详情

OAUTH2 刷新令牌

】OAUTH2刷新令牌【英文标题】:OAUTH2RefreshToken【发布时间】:2017-04-2023:28:00【问题描述】:我对OAuth2中的刷新令牌有点困惑。就像它说的访问令牌限制了黑客可以使用用户凭据的1小时时间窗口,并且刷新令牌是可用于重新创建... 查看详情

如何在springbootsecurity中实现oauth2授权

参考技术AOAuth2已经成为了一个授权的标准协议,大家在很多的产品中都能看到它的身影,比如我们登录一个网站,支持微信,QQ等登录方式,这里QQ和微信提供了授权服务。有很多的授权组件都能提供这种OAuth2认证方式,比如keyclo... 查看详情

即使访问令牌有效,也无法使用刷新令牌刷新 Google OAuth2 的访问令牌

】即使访问令牌有效,也无法使用刷新令牌刷新GoogleOAuth2的访问令牌【英文标题】:Can\'trefreshaccesstokenofGoogleOAuth2withrefreshtokeneventheaccesstokenisvalid【发布时间】:2021-12-1702:10:26【问题描述】:我的应用程序通过POSThttps://oauth2.googlea... 查看详情