Можем ли мы добавить области авторизации для внешних входов в систему и сохранить результаты в базе данных в ServiceStack? - PullRequest
1 голос
/ 06 апреля 2020

Можем ли мы настроить область в GoogleAuthProvider, чтобы получить более подробную информацию, такую ​​как номер телефона, адрес или календарь, изображение профиля?

Также можем ли мы просмотреть детали Identity и получить токен, проанализировать и сохранить эти результаты в нашей базе?

1 Ответ

1 голос
/ 06 апреля 2020

Вы можете зарегистрировать дополнительные области в коллекции GoogleAuthProvider.Scopes, которая по умолчанию заполнена :

this.Scopes = new[] {
    "https://www.googleapis.com/auth/userinfo.profile",
    "https://www.googleapis.com/auth/userinfo.email"
};

Информация OAuth от всех OAuth-провайдеров ServiceStack заполнены в зарегистрированном Auth Repository в таблице UserAuthDetails , где токен доступа хранится в AccessTokenSecret.

Вы можете получить дополнительную информацию о пользователе, используя Доступ к токену и переопределение CreateAuthInfo в пользовательском GoogleAuthProvider и переопределение реализации CreateAuthInfo(), которая по умолчанию извлекает базовую c информацию о пользователе из UserProfileUrl (https://www.googleapis.com/oauth2/v2/userinfo):

protected override Dictionary<string, string> CreateAuthInfo(string accessToken)
{
    var url = this.UserProfileUrl.AddQueryParam("access_token", accessToken);
    var json = url.GetJsonFromUrl();
    var obj = JsonObject.Parse(json);

    obj.MoveKey("id", "user_id");
    obj.MoveKey("given_name", "first_name");
    obj.MoveKey("family_name", "last_name");
    obj.MoveKey("picture", AuthMetadataProvider.ProfileUrlKey, profileUrl => profileUrl.SanitizeOAuthUrl());

    return obj;
}

Возвращенный словарь заполняет все общеизвестные свойства в UserAuthDetails в переопределяемом LoadUserAuthInfo () (который может альтернативно перехватываться с LoadUserAuthFilter на каждом AuthProvider). Все остальные несоответствующие свойства в словаре сохраняются в словаре Items в таблице UserAuthDetails.

...