HttpContext.SignInAsync 与 SigninManger.SignInAsync

Cod*_*949 15 c# asp.net asp.net-identity

有人可以向我解释他们在后台做什么吗?我使用的时候有问题HttpContext.SignInAsyncSecurityStamp

使用后SigninManger.SignInAsync错误再也没有发生。

你能向我解释一下这些变体之间的区别是什么吗?我想了解为什么HttpContext.SignInAsync会这样。

Jul*_*ian 14

我很好奇其中的区别,所以我检查了源代码。(深层链接

SignInManager.SignInAsync定义如下,其中ContextHttpContext

/// <summary>
/// Signs in the specified <paramref name="user"/>.
/// </summary>
/// <param name="user">The user to sign-in.</param>
/// <param name="authenticationProperties">Properties applied to the login and authentication cookie.</param>
/// <param name="authenticationMethod">Name of the method used to authenticate the user.</param>
/// <returns>The task object representing the asynchronous operation.</returns>
public virtual Task SignInAsync(TUser user, AuthenticationProperties authenticationProperties, string authenticationMethod = null)
{
    var additionalClaims = new List<Claim>();
    if (authenticationMethod != null)
    {
        additionalClaims.Add(new Claim(ClaimTypes.AuthenticationMethod, authenticationMethod));
    }
    return SignInWithClaimsAsync(user, authenticationProperties, additionalClaims);
}

public virtual async Task SignInWithClaimsAsync(TUser user, AuthenticationProperties authenticationProperties, IEnumerable<Claim> additionalClaims)
{
    var userPrincipal = await CreateUserPrincipalAsync(user);
    foreach (var claim in additionalClaims)
    {
        userPrincipal.Identities.First().AddClaim(claim);
    }
    await Context.SignInAsync(IdentityConstants.ApplicationScheme,
        userPrincipal,
        authenticationProperties ?? new AuthenticationProperties());
}
Run Code Online (Sandbox Code Playgroud)

所以它只是调用HttpContext.SignInAsync一些选项并在某些条件下添加声明