如题,,,希望得到关于framwork环境下,OIDC的接入指导,真心求教。现阶段场景:使用IdentityServer4在CORE服务器下搭建了服务端,现有.net环境下老的站点需要接入授权中心的单点登录【OIDC】,请问客户端没有AddOpenIdConnect方法配置的前提下这边应该怎样接入授权服务中心
2 回答
繁花如伊
TA贡献2012条经验 获得超12个赞
Idsv4是不关心客户端是谁的,我有一些想法,不知道是不是你需要的。
首先在Core
的IdentityServer4
上自定义登录地址。
services.AddIdentityServer(options => { // 忽略 options.UserInteraction.LoginUrl = Configuration["ApplicationDTO:LoginUrl"]; // 假设是/users/signIn options.UserInteraction.LogoutUrl = Configuration["ApplicationDTO:LogoutUrl"]; / })
新建一个UsersControllers
.添加signIn
的Action
.
[HttpGet] [Authorize(AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)] public async Task<IActionResult> SignIn(string returnUrl) { //通过验证后即清除cookies await HttpContext.SignOutAsync("Cookies"); #region Issued Cookie List<Claim> source = new List<Claim>() { new Claim("sub",new Guid().ToString()), new Claim("name",User.Identity.Name), new Claim("idp", "xxxxx"), new Claim("role","Custom"), new Claim("auth_time", DateTimeOffset.Now.ToEpochTime().ToString(),"http://www.w3.org/2001/XMLSchema#integer") }; source.Add(new Claim("amr", "authorization_code")); var identity = new ClaimsIdentity(source.Distinct<Claim>((IEqualityComparer<Claim>)new ClaimComparer()), "IdentityServer4", "name", "role"); var claimsPrincipal = new ClaimsPrincipal(identity); await HttpContext.SignInAsync(IdentityServerConstants.DefaultCookieAuthenticationScheme, claimsPrincipal, new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTimeOffset.Now.Add(TimeSpan.FromMinutes(43200)) }); #endregion return Redirect(returnUrl); }
Authorize
需要您在startup
自己定义登录地址。
那么流程就是如下这样的
1.在浏览器访问idsv4
服务端https://Coreidsv4/connect/authorize?......
,会跳转到/users/login
通过Authorize
验证用户是否登录,如果未登录就通过Authorization配置的登录地址去登录。登录成功重定向回来。可以在users/login
中填写自己要信息。继续下去,通过url
获取授权码 code
。然后再去拿code
去换取token
.注意参数填写正确。
- 2 回答
- 0 关注
- 820 浏览
添加回答
举报
0/150
提交
取消