我有这样的代码,它应该为用户设置声明。当我使用标识和默认登录时,它可以正常工作。但是,当我在另一个应用程序中使用jwt作为身份验证时,我没有ApplicationUser,因为我的ApplicationUser存储在对用户进行身份验证的其他应用程序中。如何自定义此代码,使其与jwt协同工作?
private readonly SignInManager<TIdentityUser> _signInManager;
public CustomClaimsCookieSignInHelper(SignInManager<TIdentityUser> signInManager)
{
_signInManager = signInManager;
}
public async Task SignInUserAsync(TIdentityUser user, bool isPersistent, IEnumerable<Claim> customClaims)
{
var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(user);
var identity = claimsPrincipal.Identity as ClaimsIdentity;
var claims = (from c in claimsPrincipal.Claims select c).ToList();
var savedClaims = claims;
if (customClaims != null)
{
identity.AddClaims(customClaims);
}
await _signInManager.Context.SignInAsync(IdentityConstants.ApplicationScheme,
claimsPrincipal,
new AuthenticationProperties { IsPersistent = isPersistent });
}
我想我的主要意图是在httpcontext中而不是在cookie中设置我的用户声明,我想在不使用标识的情况下这样做。
编辑:
我的应用结构
AuthenticationApp (服务器)
MainApp (客户)
我知道我将能够解码jwt客户端。但是,我不知道可以将解码的jwt细节存储在哪里,以便在视图中使用它。我最初的想法是像普通应用程序一样使用Httpcontext,即用户身份。但是,我被上面的代码卡住了。
发布于 2018-11-14 05:18:07
为了在Controller和View之间共享标识信息,可以使用HttpContext.SignInAsync
对用户信息进行签名。
尝试下面的步骤来实现您的需求:
Startup.cs
中注册身份验证
公共类启动{公共启动( IConfiguration配置){配置=配置;}公共IConfiguration配置{ get;} //此方法将由运行时调用。使用此方法向容器添加服务。运行时调用公共ConfigureServices(IServiceCollection服务){ // rest代码IServiceCollection}//此方法。使用此方法配置HTTP请求管道。公共空配置(IApplicationBuilder app,IHostingEnvironment env) {//您的rest代码app.UseAuthentication();app.UseMvc(路由=> { routes.MapRoute(名称:“默认”,模板:"{controller=Home}/{action=Index}/{id?}");};};
}https://stackoverflow.com/questions/53273404
复制相似问题