相关疑难解决方法(0)

ASP.NET Identity(使用IdentityServer4)获取外部资源oauth访问令牌

我已经浏览了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
});
Run Code Online (Sandbox Code Playgroud)

但这显然不是一条可行的道路.我只是为了测试目的而做了这个,并制作了所需订阅的PoC.

现在我想知道是否有更聪明的方式与identityServer通信,允许我获得这个外部访问令牌,以便我可以代表我的登录用户使用microsoft api?

或者,我唯一的选择是直接从此OAuthEvent获取Microsoft AccessToken并将其直接存储在链接到登录用户的数据库中?

我真的需要这个,因为我的大部分功能都是基于来自第三方的数据.

c# oauth asp.net-identity asp.net-identity-3 identityserver4

8
推荐指数
1
解决办法
4766
查看次数