Google OAuth2 во внешнем окне Asp. Net Core - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь реализовать внешнюю авторизацию Google oauth в окне внешнего браузера. Мой код выглядит следующим образом:

$('#signinButton').click(function () {
    window.auth2.grantOfflineAccess()
        .then(signInCallback)
        .catch(error => console.log(error));
});
function start() {
    gapi.load('auth2', function () {
        window.auth2 = gapi.auth2.init({
            client_id: 'CLIENT_Id'
        });
    });
};
function signInCallback(authResult) {
    if (authResult['code']) {
        var authCode = authResult['code'];

        $.ajax({
            type: 'POST',
            url: '/Auth/GooglePostredirect',
            data: authCode,
            headers: {
                'X-Requested-With': 'XMLHttpRequest'
            },
            contentType: 'application/octet-stream; charset=utf-8',
            success: function (result) {
            },
            processData: false,
        });
    } else {

    }
};

И вопрос после получения authToken, как я должен вызвать Google API, чтобы получить информацию о пользователе по токену авторизации. Есть ли полезные библиотеки для этого? Я не могу найти ни одного запроса userInfo по токену из c#.
Спасибо всем заранее!

1 Ответ

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

Вы можете использовать библиотеку Google.Apis.Auth из диспетчера пакетов nuget и получать информацию из токена Google, которую вы получаете из своего интерфейса

google auth library

public async Task<IActionResult> ExternalLoginGoogleAsync(string googleTokenId)
    {
        GoogleJsonWebSignature.ValidationSettings settings = new GoogleJsonWebSignature.ValidationSettings();
        settings.Audience = new List<string>() { Configuration["Authentication:Google:ClientId"] };
        GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(googleTokenId, settings);

        ApplicationUser user = await _userManager.FindByEmailAsync(payload.Email);
        if (user == null) //create new user if not exsits
        {
            user = new ApplicationUser
            {
                Email = payload.Email,
                UserName = payload.Name                            
            };                
            ...
        }                       
        return Ok(something);
    }
...