为了账号安全,请及时绑定邮箱和手机立即绑定

IdentityServer在Core环境下搭建服务器怎么让依赖framework环境下

IdentityServer在Core环境下搭建服务器怎么让依赖framework环境下

慕田峪4524236 2018-08-14 10:09:54
如题,,,希望得到关于framwork环境下,OIDC的接入指导,真心求教。现阶段场景:使用IdentityServer4在CORE服务器下搭建了服务端,现有.net环境下老的站点需要接入授权中心的单点登录【OIDC】,请问客户端没有AddOpenIdConnect方法配置的前提下这边应该怎样接入授权服务中心
查看完整描述

2 回答

?
qq_我的梦想_4

TA贡献1条经验 获得超0个赞

我也遇到这样的问题了,在线等答案

查看完整回答
反对 回复 2020-05-22
?
繁花如伊

TA贡献2012条经验 获得超12个赞

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


查看完整回答
反对 回复 2018-09-06
  • 2 回答
  • 0 关注
  • 820 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信