IdentityServer在Core环境下搭建服务器怎么让依赖framework环境下的网站作为客

2019-01-03 00:47发布

如题,,,希望得到关于framwork环境下,OIDC的接入指导,真心求教。

现阶段场景:使用IdentityServer4在CORE服务器下搭建了服务端,现有.net环境下老的站点需要接入授权中心的单点登录【OIDC】,请问客户端没有AddOpenIdConnect方法配置的前提下这边应该怎样接入授权服务中心

2条回答
不美不萌又怎样
2楼-- · 2019-01-03 01:17

数据库中已包含确定的客户端以及客户端授权码配置  这是前提。且测试使用ids4的时候,授权码模式和简易模式都不能够完成我的需求。

 

在回调CallBack的时候,默认回传的数据是包含在request.form表单中,获取完毕数据后,自己进行缓存处理。

查看更多
Evening l夕情丶
3楼-- · 2019-01-03 01:21

Idsv4是不关心客户端是谁的,我有一些想法,不知道是不是你需要的。
首先在CoreIdentityServer4上自定义登录地址。

services.AddIdentityServer(options =>
            {
                   // 忽略
                options.UserInteraction.LoginUrl = Configuration["ApplicationDTO:LoginUrl"]; // 假设是/users/signIn
                options.UserInteraction.LogoutUrl = Configuration["ApplicationDTO:LogoutUrl"]; /
            })

新建一个UsersControllers.添加signInAction.

[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.注意参数填写正确。

查看更多
登录 后发表回答