我正在尝试按照IdentityServer4快速入门示例为Amazon Alexa设置我的idP,但该示例不适用于.NET Core 2.0。
具体来说,以下一行:
await HttpContext.SignInAsync(user.SubjectId, user.Username, props);
不再存在。它似乎已被IAuthenticationService
取代 - 但是,此服务需要一个ClaimsPrincipal而不仅仅是一个id / username。
如何在没有更多信息的情况下登录用户?或者当我的唯一目标是获取授权码时,我做错了什么?
我使用了样本here和here,但它们似乎都基于相同的代码。
非常感谢授权代码流程的任何建议或样本。
答案 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);