Asp.net web api 将IdentityServer4.AccessTokenValidation和引用令牌与ASP.NET核心标识连接起来

Asp.net web api 将IdentityServer4.AccessTokenValidation和引用令牌与ASP.NET核心标识连接起来,asp.net-web-api,asp.net-identity,asp.net-core-2.0,identityserver4,bearer-token,Asp.net Web Api,Asp.net Identity,Asp.net Core 2.0,Identityserver4,Bearer Token,我正在尝试构建一个由ASP.NET Web API后端支持的Angular 6应用程序。该应用程序根据一个单独的身份服务器4对用户进行身份验证,该服务器联合Azure AD,最终返回一个承载者参考令牌 从登录和身份验证(令牌)的角度来看,一切正常。用户访问站点,重定向到Azure AD,登录,然后重定向回Angular 6应用程序。对于API调用,令牌被注入头中,ASP.NET核心身份验证中间件验证令牌并返回数据 services .AddAuthentication(options =

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

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

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核心标识,我不确定通过
AddIdentityServerAuthentication
返回的
索赔主体
在何处/如何绑定

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

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

更改为
IdentityServer4.AccessTokenValidation
后,我无法确定将此逻辑放在何处。由于我使用的是引用标记,因此它看起来不像
JwtBearerEvents
(特别是
OnTokenValidated
事件)没有被引发。事实上,看起来有任何
内省事件吗

我尝试在一个调用上述“管理器”方法的测试端点中测试逻辑(从技术上讲,它是为
ASP.NET核心标识
等效方法更新的),但这也不起作用

例如,对
SignInManager.getExternalLoginFoAsync()
的第一次调用返回
null


我做错了什么?

遇到了同样的问题。切换到引用令牌的效果很好,但现在我们尝试向已验证的标识添加声明,并且在没有OnTokenValidated事件的情况下无法找到解决方案。请使用OAuth2IntrojectEvents