今天的内容很简单,1分钟就能看完,5分钟就能学会,但是却是在我们平时开发中必须要学会的一个小知识点,我就不让大家走弯路了,直接看操作。

在平时的IdentityServer4开发中呢,我们都是根据官方的Demo来操作一遍,或者是根据那个快速启动页面跑一跑,也就没有做其他的扩展,本文说的是登录,大家肯定认为这个是最简单的了,直接跳转,然后提交表单即可,但是就在要睡觉的时候,我想到了QQ或者其他登录页都是有一个oauth的字样,看着很专业的样子????,我也想换掉,目前的太程序员化了,说干就干,坐起来打开了电脑,需求如下:

目前的登录地址是:
https://ids.neters.club/Account/Login?ReturnUrl=%2Fgrants
我想要换成这样的效果:

https://ids.neters.club/oauth2/authorize?ReturnUrl=%2Fgrants

如果说你已经会了呢,可以不用看了;

如果说自己想先动手实践一下,先关掉本文窗口;

如果两者都不是,就跟着我往下走吧,很简单。

自定义登录页样式

这个其实不是本文的内容,但是和登录页有关系,我还是说一下吧,登录页的自定义样式很简单,甚至整个页面的布局也可以改变,别说css文件了,就是很普通的MVC操作,甚至也可以搞成前后端分离的形式,你没有听错,就是用前后端分离来设计Ids4认证中心项目。

不过这个感觉不是很有必要,还是把精力放到业务上吧,我这里简单的做了下样式处理,可以和原版的坐下对比:

(官方默认版本)

(我自定义模板样式)

(群内网友的项目,挺好)

为什么要说这个呢,是因为我们既然要做统一的授权认证中心,一个好看的登录页是很有必要的,毕竟以后很多个项目都要共用这一个,安全是第一位,美貌也不能丢,我的审美就不行,等春节在家优化优化。

自定义登录路由

刚刚我们说完了登录样式,那就到了重头戏,自定义登录路由地址,官方给我们的地址是:

/Account/Login

这个看着也真的有点儿硬了,而且我看很多的公司认证项目都是自定义的,那路径肯定我们也要修改修改,翻看了下官方资料,发现很简单,还记得我们上一篇说到的自定义跳转域名么,本来是localhost,后来我们配置了ids.neters.club,没错,还是那个地方:

  services.AddIdentityServer(options =>{options.Events.RaiseErrorEvents = true;options.Events.RaiseInformationEvents = true;options.Events.RaiseFailureEvents = true;options.Events.RaiseSuccessEvents = true;options.IssuerUri = "https://ids.neters.club";options.PublicOrigin = "https://ids.neters.club";// 就是这里,自定义用户交互选项         options.UserInteraction = new UserInteractionOptions{LoginUrl = "/oauth2/authorize",//登录地址  LogoutUrl = "/Account/Logout",//退出地址 ConsentUrl = "/Account/Consent",//允许授权同意页面地址ErrorUrl = "/Account/Error", //错误页面地址LoginReturnUrlParameter = "ReturnUrl",//设置传递给登录页面的返回URL参数的名称。默认为returnUrl LogoutIdParameter = "logoutId", //设置传递给注销页面的注销消息ID参数的名称。缺省为logoutId ConsentReturnUrlParameter = "ReturnUrl", //设置传递给同意页面的返回URL参数的名称。默认为returnUrlErrorIdParameter = "errorId", //设置传递给错误页面的错误消息ID参数的名称。缺省为errorIdCustomRedirectReturnUrlParameter = "ReturnUrl", //设置从授权端点传递给自定义重定向的返回URL参数的名称。默认为returnUrl                   CookieMessageThreshold = 5 //由于浏览器对Cookie的大小有限制,设置Cookies数量的限制,有效的保证了浏览器打开多个选项卡,一旦超出了Cookies限制就会清除以前的Cookies值};})

这里的配置是没有走数据库的,只有config.cs里的会配置到数据,从这里我们可以看出他们的一贯套路,就是走配置,不过如果不了解,配置多了就会乱,这不,说来就来了:

用这种办法,在InMemory模式下很正常,我使用是内存模式的,然后也跳转到了指定的登陆页面:oauth2/authorize,欣喜雀跃,替换到我的正式项目,不!!行!!。

然后看官网也没错呀,大约时间过去了十多分钟,我想到了一个问题。

修改Identity应用配置

这个是个小知识点,如果你对Aspnet core的Identity不熟悉的话,可能不会来得及考虑这个问题,因为我的项目是用的Identity来处理应用数据这一块的,如果你公司的项目是自定义的话,那就不用考虑这个问题了,我也打算在公司尝试使用自定义仓储的模式,替换掉微软官方推荐的Identity类来操作用户应用数据。

直接修改代码吧:

services.ConfigureApplicationCookie(options =>
{options.AccessDeniedPath = new PathString("/Account/AccessDenied");options.Cookie.Name = "Cookie";options.Cookie.HttpOnly = true;options.ExpireTimeSpan = TimeSpan.FromMinutes(720);options.LoginPath = new PathString("/oauth2/authorize");options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;options.SlidingExpiration = true;
});

具体的每一个啥意思,从字面意思上我们也能看的出来,我这里只用到了LoginPath这一个属性操作,这下应该没有问题了吧。

添加新控制器

既然我们新设计了登录页,那我们就必须创建一个新的控制器OAuth2Controller,当然你可以直接修改下原来的AccountController进行重命名,我采用的还是新增,现在开发基本都是对内修改禁止的思路,不过我新增这个也不能直接粘贴复制,要重构封装,还需要进一步优化中,优化这一块以后就不写到文章了,这里一笔带过了:

public class Oauth2Controller : Controller
{private readonly UserManager<ApplicationUser> _userManager;private readonly RoleManager<ApplicationRole> _roleManager;private readonly SignInManager<ApplicationUser> _signInManager;private readonly IIdentityServerInteractionService _interaction;private readonly IClientStore _clientStore;private readonly IAuthenticationSchemeProvider _schemeProvider;private readonly IEventService _events;public Oauth2Controller(UserManager<ApplicationUser> userManager,RoleManager<ApplicationRole> roleManager,SignInManager<ApplicationUser> signInManager,IIdentityServerInteractionService interaction,IClientStore clientStore,IAuthenticationSchemeProvider schemeProvider,IEventService events){_userManager = userManager;_roleManager = roleManager;_signInManager = signInManager;_interaction = interaction;_clientStore = clientStore;_schemeProvider = schemeProvider;_events = events;}/// <summary>/// Show login page/// </summary>[HttpGet]public async Task<IActionResult> authorize(string returnUrl){// build a model so we know what to show on the login pagevar vm = await BuildLoginViewModelAsync(returnUrl);if (vm.IsExternalLoginOnly){// we only have one option for logging in and it's an external providerreturn await ExternalLogin(vm.ExternalLoginScheme, returnUrl);}return View(vm);}
}

具体的和之前的是一样的,只不过拷贝过去了而已,这里不多说,发布查看效果吧。

打包发布

修改了上面三个小地方以后,我们提交我们的代码,最终实现了目的,登录页跳转看着专业了一丢丢:

打完手工,其实说白了,整篇文章就是一个小技巧,看看就明白了,但是这里要说一下,修改完以后,一定要多多的做测试,联调,或者让群里小伙伴一起检验。

最后还是要说一下,如果你有前后端分离的开源项目,可以联系我,我帮你推荐一下,然后让更多的人都能学到,看到,了解到你。

???? 点击阅读原文,查看Admin效果

【实战 Ids4】小技巧篇:自定义登录页操作相关推荐

  1. Git使用方法(三)-小技巧篇

    Git使用方法(三)-小技巧篇 标签管理 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本. 创建标签 命令git tag <tagname>用 ...

  2. 测试手机新机软件,玩机小技巧 篇一:手把手教你快速验新机——写给剁手节买了新手机的值友...

    玩机小技巧 篇一:手把手教你快速验新机--写给剁手节买了新手机的值友 2020-12-10 17:39:14 29点赞 97收藏 11评论 创作立场声明:本文旨在分享购入新机器后如何检验手机完好的小技 ...

  3. ibm x201 怎么清理内部_维修小技巧 篇五:ThinkPadX201i拆机换散热风扇清灰教程

    维修小技巧 篇五:ThinkPadX201i拆机换散热风扇清灰教程 2020-11-25 21:45:44 16点赞 14收藏 42评论 创作立场声明:拆装有风险.拆装有风险.拆装有风险,欢迎收藏,点 ...

  4. 修改cas5成功html文件,手把手教Apereo CAS5.2.3 Server端 增量开发 自定义登录页,增加验证码,注册,修改密码等功能的方式...

    很高兴CAS系列帮助到了不少小伙伴,有不少小伙伴加QQ跟我交流 有个比较普遍的问题是大家不知道怎么把注册,修改密码等相关的功能嵌入CAS,这篇博客统一解答下,有些关于spring的内容是我查找资料结合 ...

  5. Visual Studio 小技巧:自定义代码片断

    用鼠标点点Visual Studio,会发现有个代码片断菜单:  点开后发现,原来是常用的代码片断(Tab的快捷方式)的管理器: 于是打开上面的文件夹路径: 通过经验或者直觉可知:要自定义代码片断,只 ...

  6. 轻松制作GIF动画!教你玩转PS时间轴之5个小技巧篇

    通过前两篇文章,我们已经知道制作动画的基本知识的和技巧,下面通过5个非常有用的知识点跟大家更深入地探索PS时间轴.文末附上PSD,可以下载后自行分析动画技巧. 往期回顾: <新手指南!手把手教你 ...

  7. 前端小练————天猫国际登录页

    html代码部分 <!DOCTYPE html> <html lang="en"><head><meta charset="UT ...

  8. word日常排版——小技巧篇(非常实用)

    1.一键保存WORD中的所有图片 如果WORD文档中全是图片怎么保存呢?一个个保存费时了.你可以这样一键全部保存: ① 选择文件功能选项卡,点击另存为 ② 将文件类型保存为网页(.html) ③ Wo ...

  9. windows操作小技巧1:文件批操作更改类型

    今日更新一个Windows操作小技巧: 日常生活中我们有批量操作更改文件后缀名(类型)的需要: 比如这有五个.txt文本文件,我要想将其批量改为.html该如何操作呢? 首先新建文本文档: 其次在新建 ...

最新文章

  1. C语言随机字母生成,C++ 随机数字以及随机数字加字母生成的案例
  2. Asp.net MVC生命周期
  3. 东北师范大学计算机学院的导师,东北师范大学计算机科学与信息技术学院研究生导师简介-王佳男...
  4. java微信学习 接入
  5. visual studio 2010常用快捷键
  6. 计算机电子的危害,电子垃圾焚烧炉的危害有多大,你了解过吗?
  7. 2699元起!格力首款5G手机悄然上架:骁龙765G处理器
  8. 18-elasticsearch集群健康为黄色
  9. ftp 上传档案到主机 OMVS
  10. 游戏筑基开发之单链表及其增删改查(C语言)
  11. iOS开发UITableViewCell右边的原生图标设置
  12. 045-Java-036
  13. 中国十大最狠的流氓网站曝光!送查杀流氓的工具
  14. 数据分析方法-AARRR模型分析方法
  15. 网友RHCE认证考试经历
  16. 【便签1】-win10显示/隐藏任务栏时间
  17. OJDBC版本【classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别】
  18. 小白也可以看懂的Numpy实操演示教程
  19. Windows10 通过隧道进行远程桌面连接
  20. C#窗体应用程序之复选框(ComboBox)与进度条(ProgressBar)应用——倒计时器

热门文章

  1. [转贴]犯贱报(一张浓缩大学生活的..)
  2. java 获取手机归属地_java 获取手机归属地
  3. natcat for mysql_用Navicat for mysql连接mysql报错1251-解决办法
  4. 【前端芝士树】Javascript的原型与原型链
  5. 解决在Python中使用Win32api报错的问题,No module named win32api
  6. Codeigniter中创建LeanCloud云函数实现微信支付
  7. 杭电Problem 1872 稳定排序
  8. NSInteger,NSUInteger,NSNumber
  9. 15个IT技术人员必须思考的问题
  10. 使用 SVG 动画实现弹性的页面元素效果