layout: docs-default
自定义服务
IdentityServer3提供了诸多的扩展点来扩展数据存储,验证逻辑和其他支持IdentityServer做为一个令牌服务的通用功能。
我们把这些扩展点成为"服务".
请看 here 了解所有的可扩展服务.
必须实现的服务
开发者必须实现有三个服务来使用IdentitySever:
-
用户服务(
IUserService) -
客户端存储 (
IClientStore) -
作用域存储(
IScopeStore)
这些服务,我们都提供简单的内存服务。也有各种相关的社区实现版来支持数据存储。
请看 here 了解更多.
注册客户服务
我们可以通过Registration类来替换内置服务或者注册附加的自定义服务。
IdentityServer使用Registration来获得自定义服务的实例。
依赖于服务的具体实现,我们可以利用单例模式来实现一个服务实例支持所有请求,或者在每次使用服务实例的时候调用特定的初始化逻辑。为了实现这些需求,Registration类提供了不同的构造函数来注册服务:
-
new Registration<T>(Type yourImplementation)- 注册实现了
T接口的服务类yourImplementation。
- 注册实现了
-
new Registration<T, Impl>()- 注册实现了
T接口的服务类Impl。这是上面那个方法的简化版,完成一样的工作。
- 注册实现了
-
new Registration<T>(T singleton)- 注册实现了
T接口的服务类实例singleton对象。
- 注册实现了
-
new Registration<T>(Func<IDependencyResolver, T> factory)- 注册一个回调函数来按需获取实现了
T接口的服务实例。
- 注册一个回调函数来按需获取实现了
var factory = new IdentityServerServiceFactory();
factory.UserService = new Registration<IUserService, MyCustomUserService>();
请看 Dependency Injection (DI) 了解更多信息.
服务的清理工作
除了单例模式,如果我们的服务类实现了IDisposable接口,Dispose会在HTTP请求结束时调用。









网友评论