redirect_uri 的参数值无效:缺少方案:/auth/google_auth_code/callback

Posted

技术标签:

【中文标题】redirect_uri 的参数值无效:缺少方案:/auth/google_auth_code/callback【英文标题】:Invalid parameter value for redirect_uri: Missing scheme: /auth/google_auth_code/callback 【发布时间】:2017-08-27 00:51:56 【问题描述】:

编辑here is a minimal viable project

我正在尝试从服务器端流程的授权代码中从 Google 获取访问和刷新令牌。我在这里遵循了 Google 的指南:https://developers.google.com/identity/sign-in/web/server-side-flow。

我正在使用护照和passport-google-authcode。

以下是节点应用的路由:

router.get('/auth/google_auth_code',
    passport.authenticate('google_authcode', 
        scope:
        [
            'https://www.googleapis.com/auth/calendar',
            'profile',
            'https://www.googleapis.com/auth/userinfo.email'
        ]
    ),
    function () 
        res.end();
    )

router.get('/auth/google_auth_code/callback',
    passport.authenticate('google_authcode', 
        failureRedirect: '/error'
    ), 
    function (req, res) 
        // do something with req.user
        res.send('hello');
    
);

这是此策略的护照配置。

passport.use('google_authcode', new GoogleAuthCodeStrategy(
    clientID: 'my client id',
    clientSecret: 'my secret',
    callbackURL: '/auth/google_auth_code/callback',
    // passReqToCallback: true
,
    function (accessToken, refreshToken, rawResponse, profile, done) 
            // unable to get here
    
));

发出身份验证请求时,Google 会返回以下错误:


  "error" : "invalid_request",
  "error_description" : "Invalid parameter value for redirect_uri: Missing scheme: /auth/google_auth_code/callback"

这是我在 Google 控制台中的凭据设置:

此时我不知道还能做什么。我还尝试将 passport.use 中的回调 URL 更改为绝对 URL。我肯定会取回一个有效的身份验证代码(它看起来像:4/Mb2pcOyhYhziROyFHKH5pnzvUldYbAmMop9SJKbBHXQ)。如果我可以提供更多相关信息,请告诉我。

谢谢, 山姆

编辑

我注意到上面的 URL 以正斜杠结尾。我解决了这个问题,但我还没有更新屏幕截图。

如果我使用完整的网址(例如 `http://localhost:8080//auth/google_auth_code/callback),我会收到以下错误:


  "error" : "unauthorized_client"

如果我使用完整的网址(例如 `http://localhost:8080/auth/google_auth_code/callback),我会收到以下错误:


  "error" : "redirect_uri_mismatch"

【问题讨论】:

http://localhost:8080//auth/google_auth_code/callback 为什么端口号后面有 2 个斜线? @SagarV 当我在帖子中添加信息时,这一定是一个错字。我只是加倍检查并使用完整(正确)的 URL,我现在收到 redirect_uri_mismatch 错误。这让我觉得你不应该指定主机。 在授权 javascript origins 中,而不是 http://localhost 尝试 http://localhost/auth 并检查它是否工作 @SamB 控制台不允许我添加 /auth 因为Origin URIs must not contain a path or end with "/": http://localhost:8080/auth 我读过这个。但要说清楚,我要问。您是否使用localhost 而不是这个callbackURL: '/auth/google_auth_code/callback' 来确定网址? 【参考方案1】:

似乎是 passport-google 错误,您可能会在此处看到: https://github.com/jaredhanson/passport-google-oauth/issues/21

他们在这个问题中建议使用什么:https://github.com/sqrrrl/passport-google-plus

开源的工作原理,你要么自己修复它,要么找到另一个包。

【讨论】:

以上是关于redirect_uri 的参数值无效:缺少方案:/auth/google_auth_code/callback的主要内容,如果未能解决你的问题,请参考以下文章

通过 OAuth 2 连接到 Google“redirect_uri 的参数值无效:缺少权限:”

Google OAuth 2.0 invalid_request,缺少方案

使用概念 API 进行授权时出现错误“缺少或无效的 redirect_uri”

Keycloak 登录页面显示“无效参数:redirect_uri”

Spring Boot、Minikube、Istio 和 Keycloak:“无效参数:redirect_uri”

keycloak 无效参数:redirect_uri 在反向代理后面