ASP.NET Identity (с IdentityServer4) получает токен доступа к внешнему ресурсу
Я прошел через документы для identityServer4 и настроил его для использования Microsoft Office 365 в качестве поставщика входа в систему. Когда пользователь вошел в систему, я хочу создать кнопку, с помощью которой он сможет разрешить моему приложению подписаться на события его календаря с помощью API webhooks graph.microsoft.com.
Код в автозагрузке
app.UseMicrosoftAccountAuthentication(new MicrosoftAccountOptions
{
AuthenticationScheme = "Microsoft",
DisplayName = "Microsoft",
SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme,
ClientId = "CLIENT ID",
ClientSecret = "CLIENT SECRET",
CallbackPath = new PathString("/signin-microsoft"),
Events = new OAuthEvents
{
OnCreatingTicket = context =>
{
redisCache.Set("AccessToken", context.AccessToken.GetBytes(), new DistributedCacheEntryOptions
{
AbsoluteExpiration = DateTimeOffset.UtcNow.AddDays(3)
});
return Task.FromResult(context);
}
}
Scope =
{
"Calendars.Read",
"Calendars.Read.Shared",
},
SaveTokens = true
});
Но это явно не жизнеспособный путь. Я сделал это только для целей тестирования и создания PoC необходимых подписок.
Теперь я хотел бы знать, существует ли более разумный способ связи с сервером идентификации, который позволяет мне получить этот токен внешнего доступа, чтобы я мог использовать API Microsoft от имени моих вошедших в систему пользователей?
Или мой единственный вариант - взять Microsoft AccessToken непосредственно из этого OAuthEvent и сохранить его непосредственно в базе данных, связанной с зарегистрированным пользователем?
Мне это действительно нужно, так как большая часть моей функциональности основана на данных третьих сторон.