asp.net-core – 使用IdentityServer4生成访问令牌,无需密码
发布时间:2020-11-17 09:35:30 所属栏目: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 – Umbraco CMS(.NET):加载xslt /用户控件的日志错
- asp.net-mvc – 如何在ASP.NET MVC中生成弹出页面链接
- 什么是链接服务器的ASP.NET连接字符串格式?
- asp.net-mvc – 当我不知道内容类型时如何返回文件结果
- asp.net-mvc – ASP.NET MVC获取具有特定配置文件属性的用户
- asp.net-mvc-3 – 如何在Razor视图引擎中注册程序集
- asp.net – 在WebForms中调试时关闭捆绑/缩小
- asp.net – App Settings和connectionStrings配置设置中连接
- 什么是使用aspnet_compiler.exe预编译ASP.NET项目的优势?
- ASP.NET web.config中数据库连接字符串connectionStrings节
推荐文章
站长推荐
- asp.net-mvc – 图像URL中的符号MVC导致一个潜在
- asp.net-mvc – 带vNext的MVC 6:我们还需要Glob
- .net – 什么可以解释托管堆上超过5,000,000个Sy
- 什么是链接服务器的ASP.NET连接字符串格式?
- asp.net – 从启用AJAX的WCF服务返回错误详细信息
- asp.net(C#)禁止缓存文件不让文件缓存到客户端
- 实体框架 – 使用EF和WebAPI,如何返回一个ViewMo
- asp.net-mvc-3 – CopyAllFilesToSingleFolderFo
- asp.net-mvc – 如何将MVC 5 IdentityModels.cs移
- asp.net-web-api – WebAPI 2属性路由启用会话状
热点阅读