相关这个问题,我正在自定义 UserNamePasswordValidator 中实例化与内部 API 的连接。我可以将其存储在某处,以便我可以在该用户会话中的未来调用中使用它吗?
这类似于这个问题,但我没有使用 IIS,所以我不能使用 HttpContext.Current(或者我可以吗?)。
Update:一些上下文:我们的内部 API 通过 COM 对象公开,该对象公开Login
方法。而不是拥有一个Login
方法在我的服务接口中,我有一个自定义UserNamePasswordValidator
,它调用 COM 对象上的 Login 方法。
因为实例化 COM 对象并登录的成本很高,所以我想在我的服务方法中重新使用现在登录的 COM 对象。
是的,它可以。你需要:
- 一个习俗
ServiceCredentials
返回自定义的实现SecurityTokenManager
.
- 一个习俗
SecurityTokenManager
返回自定义的实现CustomUserNameSecurityTokenAuthenticator
.
- 你的定制
CustomUserNameSecurityTokenAuthenticator
需要覆盖ValidateUserNamePasswordCore
,并且应该添加一个自定义实现IAuthorizationPolicy
.
- 你的实施
IAuthorizationPolicy
应该实施Evaluate
,此时它可以开始将内容放入 WCF 上下文中。
- 更换
evaluationContext["PrimaryIdentity"]
值与PasswordIdentity
或自定义IIdentity
.
- 更换
evaluationContext["Principal"]
值与PasswordPrincipal
或自定义IPrincipal
.
- 更新
evaluationContext["Identities"]
集合来替换GenericIdentity
实例与您的自定义实例。
通过这样做,您可以拥有一个自定义IPrincipal
其中包含一些额外信息的实现。
有关更多详细信息,请参阅this.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)