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

Google OAuth返回附加作用域而不请求,oauth,google-oauth,scopes,Oauth,Google Oauth,Scopes,我用谷歌的oauth进行了测试,并尝试了不同的范围 但是,我随后将范围请求缩减为:https://www.googleapis.com/auth/userinfo.email" 下面是dotnetcore的更多内容 Dictionary<string, string> queries = new Dictionary<string, string>(); queries.Add("scope", "https://

我用谷歌的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);
字典查询=新建字典();
添加(“范围”https://www.googleapis.com/auth/userinfo.email");
添加(“访问类型”、“脱机”);
添加(“包括授予的范围”、“真”);
添加(“响应类型”、“代码”);
添加(“州”、“州”);
添加(“重定向uri”http://localhost:5000/api/authenticate/googauth");
添加(“客户id”,客户id);
添加(“提示”、“同意”);
UriBuilder=新的UriBuilder();
builder.Host=“accounts.google.com”;
builder.Scheme=“https”;
builder.Path=“o/oauth2/v2/auth”;
//builder.Query=“”
foreach(查询中的var查询)
{
if(string.IsNullOrEmpty(builder.Query))
{
builder.Query+=$“{Query.Key}={Query.Value}”;
}
其他的
{
builder.Query+=$“&{Query.Key}={Query.Value}”;
}
}
var redirectUri=builder.Uri.ToString();
返回重定向(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);
字典值=新字典();
添加(“代码”,代码);
添加(“客户端id”,客户端id);
添加(“客户端密码”和“客户端密码”);
添加(“重定向uri”http://localhost:5000/api/authenticate/googauth");
添加(“授权类型”、“授权代码”);
var client=新的HttpClient();
var result=wait client.PostAsync(“https://oauth2.googleapis.com/token“,新格式URLEncodedContent(值));
var content=wait result.content.ReadAsStringAsync();
var convertedContent=JsonSerializer.Deserialize(内容);
然而,我似乎得到了比我要求的更多的东西。我在返回的作用域中得到:

openid

我尝试过使用incognito和不同的浏览器,它们都返回相同的内容(认为这可能是缓存问题)

有人能帮我吗


谢谢。

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

谷歌文档摘录:


基本上意味着用户之前已经授予您其他作用域。可能是通过登录屏幕或使用相同clientId的某个地方,使应用程序能够使用增量授权请求访问上下文中的其他作用域。如果将此参数的值设置为true并授予授权请求,则新的访问令牌还将覆盖用户先前授予应用程序访问权限的任何范围。有关示例,请参见增量授权部分

谷歌文档摘录:


基本上意味着用户之前已经授予您其他作用域。可能是通过登录屏幕或使用相同的clientId添加更多详细信息,问题在于行:
querys.add(“include_grated_scopes”,“true”)
告诉Google在当前授权中包含以前授予的范围。很抱歉回复得太晚,但谢谢!要添加更多详细信息,问题在于行:
querys.add(“include_grated_scopes”,“true”)
告诉Google在当前授权中包含以前授予的范围。很抱歉回复得太晚,但谢谢!