当前位置: 首页 > 知识库问答 >
问题:

Google OAuth返回附加作用域而不请求

连鸿
2023-03-14

我用谷歌的oauth进行了测试,并尝试了不同的范围。

然而,我随后将我的范围请求简化为以下内容:“https://www.googleapis.com/auth/userinfo.email”

以下是dotnetcore的更多内容

  Dictionary<string, string> queries = new Dictionary<string, string>();
            queries.Add("scope", "https://www.googleapis.com/auth/userinfo.email");
            queries.Add("access_type", "offline");
            queries.Add("include_granted_scopes" ,"true");
            queries.Add("response_type", "code");
            queries.Add("state", "state");
            queries.Add("redirect_uri", "http://localhost:5000/api/authenticate/googauth");
            queries.Add("client_id", _clientId);
            queries.Add("prompt", "consent");

            UriBuilder builder = new UriBuilder();
            builder.Host = "accounts.google.com";
            builder.Scheme = "https";
            builder.Path = "o/oauth2/v2/auth";
            //builder.Query = ""

            foreach (var query in queries)
            {
                if (string.IsNullOrEmpty(builder.Query))
                {
                    builder.Query += $"{query.Key}={query.Value}";
                }
                else
                {
                    builder.Query += $"&{query.Key}={query.Value}";
                }
            }

            var redirectUri = builder.Uri.ToString();

            return Redirect(redirectUri);

然后从返回的代码中检索访问令牌等。

   Dictionary<string, string> values = new Dictionary<string, string>();
            values.Add("code", code);
            values.Add("client_id", _clientId);
            values.Add("client_secret",_clientSecret);
            values.Add("redirect_uri", "http://localhost:5000/api/authenticate/googauth");
            values.Add("grant_type", "authorization_code");

            var client = new HttpClient();
            var result = await client.PostAsync("https://oauth2.googleapis.com/token", new FormUrlEncodedContent(values));
            var content = await result.Content.ReadAsStringAsync();
            var convertedContent = JsonSerializer.Deserialize<GoogleAccesstoken>(content);

然而,我得到的似乎比我要求的要多。我在返回的范围中得到这个:

openidhttps://www.googleapis.com/auth/user.gender.read https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/user.birthday.read

我尝试过使用隐姓埋名和不同的浏览器,它们都返回相同的东西(认为这可能是缓存问题)。

有人能帮我吗?

谢谢。

共有1个答案

罗新
2023-03-14

使应用程序能够使用增量授权来请求对上下文中其他作用域的访问。如果您将此参数的值设置为true,并且授权请求被授予,那么新的访问令牌还将覆盖用户之前授予应用程序访问权限的任何范围。有关示例,请参见增量授权部分。

摘自谷歌文档:https://developers.google.com/identity/protocols/oauth2/web-server

基本上意味着用户之前已经授予您其他作用域。可能是通过登录屏幕或使用相同clientId的东西

 类似资料:
  • 问题内容: (第一个问题制定得很厉害后,我再问我一个问题) 我面临以下问题: 上面编写的元素是预定义的。现在,我通过XMLHttpRequest&Co.加载xml树,并提供以下响应: 我现在追加第一个使用 进入预定义 最终文档如下所示(已使用开发工具检查): 现在,当我尝试使用元素时,会得到预期的结果。 但是使用退货。 我错过了什么?这可能是节点属于类型而不是类型的事实的残余吗? 问题答案: 这是

  • 我注意到,如果没有where(),returning()操作不可用。这是故意的吗? 这项工作: 这不起作用: 我应该考虑这个“黑客”吗?

  • 我从girdview适配器类调用startActivityForResult事件。Gridview适配器类是由myFragment类创建的。intent extras始终返回null onActivityResult事件。你认为错误在哪里?谢了。 我的gridview适配器类; onActivityResult事件的MyFragment类

  • 问题内容: 我正在通过jQuery的$ .ajax函数使用的第三方API上调用POST。但是,当我拨打电话时,出现以下错误: 我从这篇文章中看到这可能是Webkit的错误,所以我在Firefox中尝试了此操作(我正在使用Chrome开发),并且得到了相同的结果。 在这篇文章中,我还尝试通过将$.ajax函数的属性设置为并将设置为来使用jsonp。但是,这导致了500个内部服务器错误。 当我使用–d

  • 什么是函数的 附加作用? 如果一个函数除了计算返回值以外,还有其他可观测作用,我们就称这个函数拥有附加作用。 哪些是函数的 附加作用 ? 网络请求 如果一个函数发起了网络请求,那他就是有附加作用的。这个附加作用是获取或写入了函数本体以外的全局状态(数据库存储的状态可看作是全局状态)。 获取位置信息 如果一个函数获取了位置信息,那他就是有附加作用的。这个附加作用是获取了函数本体以外的位置信息(也可以

  • 我试图让2支球队互相比赛。当我说团队1.玩(团队2)时,我称之为;当 i 生成的数字小于 0.5 时,team2 应获胜,如果大于 0.5,则团队 1 应获胜。当团队 1 获胜时,它会正确显示为尼克斯,但当团队 2 获胜时,它会显示内存地址。我怎么能让它正确地说网是赢的,而不是team@78987neu73