在我的startup.auth.cs里面我做:

app.UseOAuthBearerAuthentication()

我向它提供了一个OAuthBearerAuthenticationOptions,其中包含一系列使用Azure Active Directory B2C租户定制的选项 . 这本身运作良好 . 我可以使用我的MVC应用程序登录,获取一个不记名令牌并调用此Web Api 2项目,我看到一个有效的身份验证身份 . 一切都很好 .

但是,我需要做的是在验证过程中再做一些工作,并为身份添加一些自定义声明 . 我想弄清楚哪个地方最适合这样做 . 例如,在我使用OpenID的MVC应用程序中,我可以使用OpenIdConnectAuthenticationOptions的OnSecurityTokenValidated通知来添加声明 . 这个带有新声明的新令牌/身份似乎在整个神秘的OWIN浩瀚的地方被缓存,以便后续呼叫的身份具有我额外增加的声明,而无需每次都通过OnSecurityTokenValidated .

对于OAuthBearerAuthenticationOptions对应项,我尝试在自定义OAuthBearerAuthenticationProvider的ValidateIdentity()中添加声明 . 这样做有效,但我不希望每次调用时都会产生性能损失,因为每次都会触发此回调,而不是在令牌验证期间触发一次 .

所以我的问题是,如果在所有Oauth Bearer令牌类和OWIN中间件中有一些地方,我可以这样做,这与OpenID对应的ValidateToken()类似,或者我是否必须编写自己的缓存机制?

谢谢 .