在介绍自定义用户服务之前先对IdentityServerServiceFactory说明下 Idr3的服务工厂

下面有很多idr3提供的接口服务,

如:ViewService、UserService、ClientStore 等很多,可以做很多的事情

其实它承载的不光是自身的接口服务,其实还提供了 服务注册 DI ,我们可以注册自己的接口服务实现

自定义用户服务只需要去实现 IUserService接口就行了

  1. factory.UserService = new Registration<IUserService, IdrConfig.UserServices>();

去看下IUserService接口中的方法

  1. //
  2. // 摘要:
  3. // This method gets called when the user uses an external identity provider to authenticate.
  4. // The user's identity from the external provider is passed via the `externalUser`
  5. // parameter which contains the provider identifier, the provider's identifier for
  6. // the user, and the claims from the provider for the external user.
  7. //
  8. // 参数:
  9. // context:
  10. // The context.
  11. Task AuthenticateExternalAsync(ExternalAuthenticationContext context);
  12. //
  13. // 摘要:
  14. // This method gets called for local authentication (whenever the user uses the
  15. // username and password dialog).
  16. //
  17. // 参数:
  18. // context:
  19. // The context.
  20. Task AuthenticateLocalAsync(LocalAuthenticationContext context);
  21. //
  22. // 摘要:
  23. // This method is called whenever claims about the user are requested (e.g. during
  24. // token creation or via the userinfo endpoint)
  25. //
  26. // 参数:
  27. // context:
  28. // The context.
  29. Task GetProfileDataAsync(ProfileDataRequestContext context);
  30. //
  31. // 摘要:
  32. // This method gets called whenever identity server needs to determine if the user
  33. // is valid or active (e.g. if the user's account has been deactivated since they
  34. // logged in). (e.g. during token issuance or validation).
  35. //
  36. // 参数:
  37. // context:
  38. // The context.
  39. Task IsActiveAsync(IsActiveContext context);
  40. //
  41. // 摘要:
  42. // This method is called prior to the user being issued a login cookie for IdentityServer.
  43. //
  44. // 参数:
  45. // context:
  46. // The context.
  47. Task PostAuthenticateAsync(PostAuthenticationContext context);
  48. //
  49. // 摘要:
  50. // This method gets called before the login page is shown. This allows you to determine
  51. // if the user should be authenticated by some out of band mechanism (e.g. client
  52. // certificates or trusted headers).
  53. //
  54. // 参数:
  55. // context:
  56. // The context.
  57. Task PreAuthenticateAsync(PreAuthenticationContext context);
  58. //
  59. // 摘要:
  60. // This method gets called when the user signs out.
  61. //
  62. // 参数:
  63. // context:
  64. // The context.
  65. Task SignOutAsync(SignOutContext context);

IUserService

我们在自己定义的 UserServices中去实现这些接口方法

  1. OwinContext ctx;
  2. //修改 这里依赖我们注册的接口服务
  1. ILYMUser _userServices;
  2.  
  3. public UserServices(OwinEnvironmentService owinEnv,ILYMUser userServices) {
  1. ctx = new OwinContext(owinEnv.Environment);
  2. _userServices=userServices;
  1. }

到了这一步,其实只是去实现它的接口,在接口方法实现中我们要用自己的接口服务怎么办呢?

其实只需要在factory上注册自己的 服务接口就行了,然后在创建UserServices 构造函数是依赖我们之前注册的自定义服务接口就ok了

  1. factory.Register(new Registration<ILYMUser, LYMUser>());
  2. factory.UserService = new Registration<IUserService, IdrConfig.UserServices>();

这里的ILYMUser、LYMUser自定的接口服务,定义好登录相关方法,在UserServices中本地身份验证的中实现先关业务逻辑就ok

AuthenticateLocalAsync:当用户使用该方法时,该方法将调用本地身份验证 用户名和密码对话框

Tips:这里Owin中间件上下文对象需要创建idr3的环境变量,可以扩展提交一些其他授权参数

一步一步学习IdentityServer3 (7)的更多相关文章

  1. 一步一步学习IdentityServer3 (1)

    学习之初: IdentityServer3我自己最开始了解到的就是做一个SSO单点登录,后面发现还有单独的认证服务功能,其实它还可以做APIs的访问控制,资源授权,另外还可以为提供第三方登录,其他的自 ...

  2. 一步一步学习IdentityServer3 (2)

    下面就来做一个例子:IdentityServer3服务端的配置 VS2015创建一个MVC项目 IdrOAuth 用来授权的认证的站点

  3. 一步一步学习IdentityServer3 (4)

    其实上述例子 很多都很找到 但是在实际生态环境中给例子有很多不一样的地方 比如自定已登录界面怎么做? 怎么访问自己的用户数据库实现登录? 怎么在接口中使用,在接口中又怎么实现与Idr3结合授权? 等等 ...

  4. 12.Linux软件安装 (一步一步学习大数据系列之 Linux)

    1.如何上传安装包到服务器 有三种方式: 1.1使用图形化工具,如: filezilla 如何使用FileZilla上传和下载文件 1.2使用 sftp 工具: 在 windows下使用CRT 软件 ...

  5. (转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助.原文:http://blog.csdn.net/kinfey/article/details/44459625 编者语 : 昨晚写好的文章居然csd ...

  6. (转) 一步一步学习ASP.NET 5 (二)- 通过命令行和sublime创建项目

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 注:昨天转发之后很多朋友指出了vNext的命名问题,原文作者已经做出了修改,后面的标题都适用 asp.net 5这个名称. 编者语 : 昨天发了第 ...

  7. 一步一步学习SignalR进行实时通信_1_简单介绍

    一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...

  8. 一步一步学习SignalR进行实时通信_8_案例2

    原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...

  9. 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序

    原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...

  10. 一步一步学习SignalR进行实时通信_7_非代理

    原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...

随机推荐

  1. R语言:克里金插值

    基于空间自相关,R语言克里金插值 library(gstat) Warning message: In scan(file = file, what = what, sep = sep, quote ...

  2. NATS_04:NATS协议详解

    NATS的协议是一个简单的.基于文本的发布/订阅风格的协议.客户端连接到 gnatsd(NATS服务器),并与 gnatsd 进行通信,通信基于普通的 TCP/IP 套接字,并定义了很小的操作集,换行 ...

  3. Cloudstack安装(二)

    Cloudstack安装 官方文档参考: http://docs.cloudstack.apache.org/projects/cloudstack-installation/en/4.9/qig.h ...

  4. [spark]-Spark2.x集群搭建与参数详解

    在前面的Spark发展历程和基本概念中介绍了Spark的一些基本概念,熟悉了这些基本概念对于集群的搭建是很有必要的.我们可以了解到每个参数配置的作用是什么.这里将详细介绍Spark集群搭建以及xml参 ...

  5. Java基础-正则表达式(Regular Expression)语法规则简介

    Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...

  6. Spring和springmvc父子容器注解扫描问题详解

      一.Spring容器和springmvc容器的关系如下图所示: Spring和springmvc和作为两个独立的容器,会把扫描到的注解对象分别放到两个不同的容器中, Springmvc容器是spr ...

  7. Hbase建模选择

    日期 2017年3月17日 HBase建模记录 OLTP 应用场景: OLAP 应用场景: 语音分析系统的应用场景 基于HBase的建模考虑 1.话单为主来考虑hbase的rowkey的生成规则: 1 ...

  8. Linux学习4-信号

      信号 信号是Unix和Linux系统响应某些条件而产生的一个条件.接收到该信号的进程会相应的采取一些行动. 信号是由于某些错误条件而生成的,如内存冲突,浮点处理器错误或非法指令等.它们由shell ...

  9. laravel带条件查询手动分页

    后台php代码: //手动分页 $users = $kaoqin; //打算输出的数组,二维 $perPage = 10; if ($request->has('page')) { $curre ...

  10. shell if判断中常用的a-z表达式含义

    shell if判断中常用的a-z表达式含义 可通过在在linux中man test命令查看下列参数的详细用法   [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 ...