【发布时间】:2017-04-23 18:26:28
【问题描述】:
我已经阅读了 identityServer4 的文档,并将其设置为使用 Microsoft Office 365 作为登录提供程序。当用户登录后,我想创建一个按钮,他可以在其中允许我的应用使用 graph.microsoft.com 的 webhooks api 订阅他的日历事件
startup.cs中的代码
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。
现在我想知道是否有一种更智能的方式与 identityServer 通信,允许我获取这个外部访问令牌,以便我可以代表我的登录用户使用 microsoft api?
或者我唯一的选择是直接从该 OAuthEvent 获取 Microsoft AccessToken 并将其直接存储在与登录用户相关联的数据库中?
我真的需要这个,因为我的大部分功能都是基于来自第三方的数据。
【问题讨论】:
标签: c# oauth asp.net-identity identityserver4 asp.net-identity-3