Asp.net core 在JWT(Identity Server 4)中添加RememberMe值作为声明
我正在使用IdentityServer 4 发出索赔时是否可以访问Asp.net core 在JWT(Identity Server 4)中添加RememberMe值作为声明,asp.net-core,identityserver4,Asp.net Core,Identityserver4,我正在使用IdentityServer 4 发出索赔时是否可以访问RememberMe布尔值?(在Microsoft.AspNetCore.Identity中命名为isPersistent) 我的想法是添加一个反映RememberMe值的声明,以便其他应用程序可以使用该值 目前,我正在接口IProfileService.GetProfileDataAsync的实现中添加声明 public async Task GetProfileDataAsync(ProfileDataRequestConte
RememberMe
布尔值?(在Microsoft.AspNetCore.Identity中命名为isPersistent
)
我的想法是添加一个反映RememberMe
值的声明,以便其他应用程序可以使用该值
目前,我正在接口IProfileService.GetProfileDataAsync
的实现中添加声明
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
await Task.Run(() =>
{
try
{
var user = _userManager.GetUserAsync(context.Subject).Result;
var claims = new List<Claim>
{
// I'm adding my current claims here, like so:
new Claim("contact_id", user.ContactId.ToString()),
// etc
// I would like to add RememberMe
new Claim("remember_me", ??? )
};
context.IssuedClaims.AddRange(claims);
// ..
公共异步任务GetProfileDataAsync(ProfileDataRequestContext上下文)
{
等待任务。运行(()=>
{
尝试
{
var user=\u userManager.GetUserAsync(context.Subject).Result;
var索赔=新列表
{
//我在这里添加我当前的声明,如下所示:
新声明(“contact_id”,user.ContactId.ToString()),
//等
//我想补充一点
新的索赔(“记住我”?)
};
context.IssuedClaims.AddRange(索赔);
// ..
或者可以通过其他方法访问
RememberMe
值吗?是的,您应该向令牌添加声明。在标准OIDC规范中,令牌是客户端和身份提供程序之间的绑定。只要IdentityServer需要向客户端应用程序返回有关用户的声明,就会调用配置文件服务,并可用于添加自定义声明
您可以在用户登录期间添加其他声明。SignInAsync有一个重载,它接受一系列附加声明。 下面是一段代码片段
public async Task<IActionResult> Login(LoginInputModel model)
...
AuthenticationProperties props = null;
Claim keepMeLoggedIn = null;
if (AccountOptions.AllowRememberLogin && model.RememberLogin)
{
props = new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTimeOffset.UtcNow.Add(AccountOptions.RememberMeLoginDuration)
};
keepMeLoggedIn = new Claim(AccountOptions.KeepLoggedInClaim, true.ToString());
}
await HttpContext.SignInAsync(userId.ToString(), model.Username, props, keepMeLoggedIn);
公共异步任务登录(LoginInputModel)
...
AuthenticationProperties props=null;
Claim keepMeLoggedIn=null;
if(AccountOptions.AllowRememberLogin&&model.RememberLogin)
{
props=新的AuthenticationProperties
{
ispersist=true,
ExpiresUtc=DateTimeOffset.UtcNow.Add(AccountOptions.rememberLoginDuration)
};
keepMeLoggedIn=newclaim(AccountOptions.KeepLoggedInClaim,true.ToString());
}
等待HttpContext.SignInAsync(userId.ToString(),model.Username,props,keepMeLoggedIn);
请注意,要使此解决方案起作用,必须将您的索赔名称插入到IdentityClaims表中。只需在登录时将该值添加为索赔。他询问如何在发布索赔时访问Memberme的值。顺便说一句,我也在寻找相同的值。