没有主体的ASP.NET Core 2.0 SignInAsync

时间:2018-01-14 21:55:59

标签: asp.net asp.net-core .net-core identityserver4

我正在尝试按照IdentityServer4快速入门示例为Amazon Alexa设置我的idP,但该示例不适用于.NET Core 2.0。

具体来说,以下一行:

await HttpContext.SignInAsync(user.SubjectId, user.Username, props);

不再存在。它似乎已被IAuthenticationService取代 - 但是,此服务需要一个ClaimsPrincipal而不仅仅是一个id / username。

如何在没有更多信息的情况下登录用户?或者当我的唯一目标是获取授权码时,我做错了什么?

我使用了样本herehere,但它们似乎都基于相同的代码。

非常感谢授权代码流程的任何建议或样本。

2 个答案:

答案 0 :(得分:2)

我找到了SignInManager<ApplicationUser>,这就是诀窍。 {Core} DI容器注入了_signinManager

var user = await _userManager.FindByNameAsync(model.Username);
AuthenticationProperties props = null;
await _signinManager.SignInAsync(user, props);

答案 1 :(得分:0)

如果您现在遇到此问题,则可能是由于-HttpContext.SignInAsync(user.Id, user.UserName) #4546

基本上,快速入门UI已更新为使用带有IdentityServerUser对象的SignInAsync()新扩展方法。

查看我们更新后的用户界面-其中包含您要询问的所有更改...例如

https://github.com/IdentityServer/IdentityServer4.Quickstart.UI/blob/main/Quickstart/Account/ExternalController.cs#L114-L121

基本上可以归结为将您的SignInAsync()行替换为;

// issue authentication cookie for user
var user = new IdentityServerUser(model.SubjectId)
{
  DisplayName = model.Username
};
await HttpContext.SignInAsync(user, props);