使用ASP.NET Core标识连接IdentityServer4.AccessTokenValidation和参考令牌

时间:2018-08-09 11:08:15

标签: asp.net-web-api asp.net-identity asp.net-core-2.0 identityserver4 bearer-token

我正在尝试构建一个由 ASP.NET Web API 后端支持的 Angular 6 应用程序。该应用程序根据单独的 Identity Server 4 对用户进行身份验证,该服务器联合Azure AD,最终返回 Bearer 参考令牌。

从登录名然后进行身份验证(令牌)的角度来看,一切正常。用户访问网站,重定向到Azure AD,登录,然后重定向回到Angular 6应用程序。对于API调用,令牌被注入到标头中,并且ASP.NET Core身份验证中间件验证令牌并返回数据。

services
    .AddAuthentication(options => {
        options.DefaultScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
        options.DefaultAuthenticateScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
        options.DefaultSignInScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
    })
    .AddIdentityServerAuthentication(options => {
        options.Authority = AuthClient.SsoBaseUrl;
        options.RequireHttpsMetadata = false;
        options.ApiName = AuthClient.SsoClientName;
        options.ApiSecret = AuthClient.SsoClientSecret;
    });

我的问题是我正在尝试合并ASP.NET Core身份,并且不确定在哪里/如何绑定通过claims principal返回的AddIdentityServerAuthentication

在此应用程序的先前版本(ASP.NET Framework 4.7)中,我们使用了Ws-Federation,它重定向回ExternalCallbackLogin()中的AccountController,并执行通常的AuthenticationManager.GetExternalLoginInfoAsync(),然后SignInManager.ExternalSignInAsync(),然后是(如果需要AppUserManager.CreateAsync()AppUserManager.AddLoginAsync()

这段代码基本上检查了[AspNetUserLogins]表中提供者特定的密钥(来自声明)以映射到[AspNetUsers]表中的用户。

更改为IdentityServer4.AccessTokenValidation后,我不知道该放在哪里。由于我使用的是引用标记,因此好像没有引发JwtBearerEvents(特别是OnTokenValidated事件)。实际上,它确实看起来像Introspection事件... ??

我尝试过在称为上述“管理器”方法的测试端点中测试逻辑(从技术上讲,它是对ASP.NET Core Identity等价方法的更新),但也无法正常工作。

例如,第一次调用SignInManager.GetExternalLoginInfoAsync()会返回null

我在做什么错了?

0 个答案:

没有答案