#oauth #google-oauth #scopes
#оавт #google-oauth #области #oauth
Вопрос:
Я тестировал oauth от Google и пробовал разные области.
Однако затем я сократил свой запрос области только до этого: «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 = $"amp;{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);
Однако, похоже, я получаю больше, чем просил. Я получаю это в возвращенных областях :
OpenID https://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
Я пробовал использовать incognito и разные браузеры, и все они возвращают одно и то же (думая, что это могла быть проблема с кэшем).
Кто-нибудь может мне помочь в этом?
Спасибо.
Ответ №1:
Позволяет приложениям использовать инкрементную авторизацию для запроса доступа к дополнительным областям в контексте. Если вы установите значение этого параметра равным true и запрос на авторизацию будет удовлетворен, то новый токен доступа также будет охватывать все области, к которым пользователь ранее предоставил приложению доступ. Смотрите примеры в разделе инкрементная авторизация.
выдержка из документации Google:https://developers.google.com/identity/protocols/oauth2/web-server
В основном означает, что пользователь ранее предоставил вам другие области. Возможно, это было через экран входа в систему или что-то еще, где вы использовали тот же идентификатор клиента
Комментарии:
1. Чтобы добавить еще немного деталей, проблема связана со строкой:
queries.Add("include_granted_scopes" ,"true");
, которая сообщает Google включить области, которые были ранее предоставлены, в текущий грант.2. извините за крайне поздний ответ, но спасибо!