Нет, вам не нужно реализовывать часть для получения токенов, это обрабатывается обработчиком, но вам необходим обратный вызов для обработки входа, хранения заявок и создания имени входа. Вот примитивный пример того, как получить токены доступа:
EDIT
Я буду использовать Google в качестве примера, потому что у меня есть код под рукой, но OAuth IdentityServer должен быть таким же, поскольку они расширяют OAuthHandler
services.AddAuthentication(options =>
{
//Add your identity Server schema etc
})
.AddGoogle(options =>
{
options.SaveTokens = true;
options.ClientId = Configuration["Google:ClientId"];
options.ClientSecret = Configuration["Google:ClientSecret"];
})
А в вашем контроллере аутентификации:
[HttpPost("ExternalLogin")]
[AllowAnonymous]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
{
var redirectUrl = Url.Action(nameof(ExternalLoginCallback), "Account", new { returnUrl });
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
return Challenge(properties, provider);
}
[HttpGet("ExternalLoginCallback")]
[AllowAnonymous]
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)
{
if (remoteError != null)
{
throw new Exception($"Error from external provider: {remoteError}");
}
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
//It throws here, since there are no tokens
throw new Exception("Error: could not find user tokens");
}
//Handle the rest of authentication
}
Что происходит? У вас есть кнопка, указывающая на вашего провайдера внешнего входа «Google» в качестве провайдера.
Вы перенаправлены на страницу входа в Google, и вы входите.
Сервер Google перенаправляет вас обратно на ваш домен и / google-signin (по умолчанию скрыто в дескрипторе) с кодом авторизации
Затем обработчик Google использует код авторизации вместе с вашим секретом для получения токенов
Если указать сохранение токенов, в параметрах OAuth токены из ответа будут сохранены. Наряду с некоторыми основными утверждениями, полученными от конечной точки информации пользователя.
Затем вы будете перенаправлены на обратный вызов внешнего входа:
_signInManager.GetExternalLoginInfoAsync();
Получит сохраненные токены.
Итак, чтобы ответить на ваш вопрос. Обработчик позаботится о сохранении токенов (если вы укажете это). И вы можете получить их из signInManger, если это необходимо.