Asp.net 如何在声明注入期间访问身份验证令牌

Asp.net 如何在声明注入期间访问身份验证令牌,asp.net,asp.net-core,Asp.net,Asp.net Core,在AuthenticationEvents(OIDC)期间,我在AuthenticationProperties中存储了一些数据,因为我认为这是一个实用的地方(即我在那里存储了Adal令牌缓存,这可能是个好主意,也可能不是个好主意) 然后我使用声明转换,它将从另一个服务添加用户配置文件声明。该服务将使用OAuth承载身份验证。通过调用httpContext.authentication.GetTokenAsync(\u SharedAthoptions.SignInScheme,tokenNam

在AuthenticationEvents(OIDC)期间,我在AuthenticationProperties中存储了一些数据,因为我认为这是一个实用的地方(即我在那里存储了Adal令牌缓存,这可能是个好主意,也可能不是个好主意)

然后我使用声明转换,它将从另一个服务添加用户配置文件声明。该服务将使用OAuth承载身份验证。通过调用
httpContext.authentication.GetTokenAsync(\u SharedAthoptions.SignInScheme,tokenName),从AuthenticationProperties检索承载身份验证所需的令牌

现在有趣的部分是:
GetTokenAsync()
将调用
AuthenticationManager.Authenticate()
,然后它将尝试运行我的声明注入,它将尝试联系需要oAuth承载令牌的服务,它将调用
GetTokenAsync()
,它将调用
AuthManager.Authetnicate()
,然后运行我的索赔注入等(StackOverflowException-yay)

一些代码片段:
保存代币

现在问题是: 有没有办法在不重新运行身份验证管道的情况下访问AuthenticationProperties?
如果没有,是否有一种好方法可以将其他数据保存到生成的主索赔中?

我的问题的解决方法非常简单。
我最初希望确保令牌缓存的存在与身份验证会话的生存期相耦合。出于某种原因,我认为将其保存到上述属性中是个好主意。

我不会再那样做了。只要将数据保存到索赔中,一切都会很顺利。

我的问题很容易解决。
我最初希望确保令牌缓存的存在与身份验证会话的生存期相耦合。出于某种原因,我认为将其保存到上述属性中是个好主意。
我不会再那样做了。只要将数据保存到索赔单中,一切都会很顺利

public static async Task<AuthenticationResult> AuthorizationCodeReceived(AuthorizationCodeReceivedContext context)
{
    var clientCred = new ClientCredential(context.Options.ClientId, context.Options.ClientSecret);

    var authContext = new AuthenticationContext(context.Options.Authority, false, new TokenCache());
    var result = await authContext.AcquireTokenByAuthorizationCodeAsync(context.ProtocolMessage.Code,
        new Uri(context.Properties.Items[OpenIdConnectDefaults.RedirectUriForCodePropertiesKey]), clientCred, context.Options.Resource);

    var authToken = SerializeCache(authContext.TokenCache);

    var properties = new List<AuthenticationToken> { authToken };
    context.Properties.StoreTokens(properties);

    return result;
}
await httpContext.Authentication.GetTokenAsync(_sharedAuthOptions.SignInScheme, AdalTokenCacheName);