asp.net-core – 使用IdentityServer4生成访问令牌,无需密码
发布时间:2020-05-22 20:02:53 所属栏目:asp.Net 来源:互联网
导读:我使用ROPC流创建了使用IdentityServer4保护的ASP.NET Core WebApi(使用此示例: https://github.com/robisim74/AngularSPAWebAPI). 如何在没有密码的情况下从服务器手动生成access_token? [HttpPost(loginas/{id})][Authorize(Roles = admin)]publi
|
我使用ROPC流创建了使用IdentityServer4保护的ASP.NET Core WebApi(使用此示例: https://github.com/robisim74/AngularSPAWebAPI). 如何在没有密码的情况下从服务器手动生成access_token? 解决方法[HttpPost("loginas/{id}")]
[Authorize(Roles = "admin")]
public async Task<IActionResult> LoginAs(int id,[FromServices] ITokenService TS,[FromServices] IUserClaimsPrincipalFactory<ApplicationUser> principalFactory,[FromServices] IdentityServerOptions options)
{
var Request = new TokenCreationRequest();
var User = await userManager.FindByIdAsync(id.ToString());
var IdentityPricipal = await principalFactory.CreateAsync(User);
var IdServerPrincipal = IdentityServerPrincipal.Create(User.Id.ToString(),User.UserName,IdentityPricipal.Claims.ToArray());
Request.Subject = IdServerPrincipal;
Request.IncludeAllIdentityClaims = true;
Request.ValidatedRequest = new ValidatedRequest();
Request.ValidatedRequest.Subject = Request.Subject;
Request.ValidatedRequest.SetClient(Config.GetClients().First());
Request.Resources = new Resources(Config.GetIdentityResources(),Config.GetApiResources());
Request.ValidatedRequest.Options = options;
Request.ValidatedRequest.ClientClaims = IdServerPrincipal.Claims.ToArray();
var Token = await TS.CreateAccessTokenAsync(Request);
Token.Issuer = "http://" + HttpContext.Request.Host.Value;
var TokenValue = await TS.CreateSecurityTokenAsync(Token);
return Ok(TokenValue);
}
对于新发布的IdentityServer 2.0.0,代码需要进行一些修改: [HttpPost("loginas/{id}")]
[Authorize(Roles = "admin")]
public async Task<IActionResult> LoginAs(int id,[FromServices] IdentityServerOptions options)
{
var Request = new TokenCreationRequest();
var User = await userManager.FindByIdAsync(id.ToString());
var IdentityPricipal = await principalFactory.CreateAsync(User);
var IdentityUser = new IdentityServerUser(User.Id.ToString());
IdentityUser.AdditionalClaims = IdentityPricipal.Claims.ToArray();
IdentityUser.DisplayName = User.UserName;
IdentityUser.AuthenticationTime = System.DateTime.UtcNow;
IdentityUser.IdentityProvider = IdentityServerConstants.LocalIdentityProvider;
Request.Subject = IdentityUser.CreatePrincipal();
Request.IncludeAllIdentityClaims = true;
Request.ValidatedRequest = new ValidatedRequest();
Request.ValidatedRequest.Subject = Request.Subject;
Request.ValidatedRequest.SetClient(Config.GetClients().First());
Request.Resources = new Resources(Config.GetIdentityResources(),Config.GetApiResources());
Request.ValidatedRequest.Options = options;
Request.ValidatedRequest.ClientClaims = IdentityUser.AdditionalClaims;
var Token = await TS.CreateAccessTokenAsync(Request);
Token.Issuer = HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value;
var TokenValue = await TS.CreateSecurityTokenAsync(Token);
return Ok(TokenValue);
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 如何在Web应用程序中对PDF文档进行数字签名?
- asp.net-mvc – 使用signalr时,将有任何连接限制在IIS
- 编辑并在ASP.NET Web项目中继续
- asp.net-mvc-3 – 是否可能显示从ASP.NET MVC 3中的数据库的
- asp.net-core – ASP.NET Core中的System.Data.Entity.Spat
- asp.net – 如何使用Membership API与自己的应用程序相关数
- asp.net – 如何重命名Visual Studio 2012中的IIS Express网
- asp.net-mvc – 如何asp.net(mvc)服务器返回错误jquery aja
- asp.net – 手动更新表单认证券:
- webforms – ASP.NET Web窗体(4.5)强类型模型绑定 – ListV
推荐文章
站长推荐
- asp.net-mvc – 具有输出参数的ExecuteSqlComman
- asp.net – 控制权限的最佳做法?
- asp.net-mvc – asp.net mvc:int值的千位分隔符
- asp.net-core – 从ASP.NET Core MVC Web应用程序
- asp.net – 如何在.net 3.5中托管我的MVC3应用程
- ASP.Net:如何从内容页面事件处理程序调用主页面
- asp.net-mvc-3 – MVC3非顺序索引和DefaultModel
- asp.net webforms路由:可选参数
- asp.net – 如何尊重“从无Cookie域中提供静态内
- asp.net-mvc – 如何在Razor View中格式化lambda
热点阅读
