与此问题相关,我正在自定义UserNamePasswordValidator中实例化与内部API的连接。我可以将其存储在某个地方,以便将来在该用户会话中使用时使用吗?
这类似于这个问题,但是我没有使用IIS,所以不能使用HttpContext.Current(或者可以吗?)。
更新:一些上下文:我们的内部API通过COM对象公开,该COM对象公开了一个Login
方法。Login
我没有在服务界面中使用方法,而是有了一个custom UserNamePasswordValidator
,它在COM对象上调用Login方法。
因为实例化COM对象并登录很昂贵,所以我想在我的服务方法中重用现在登录的COM对象。
是的,它可以。你需要:
ServiceCredentials
返回定制的定制实现SecurityTokenManager
。SecurityTokenManager
返回定制的定制实现CustomUserNameSecurityTokenAuthenticator
。CustomUserNameSecurityTokenAuthenticator
需要覆盖ValidateUserNamePasswordCore
,并应添加的自定义实现IAuthorizationPolicy
。IAuthorizationPolicy
应该实现Evaluate
,这时它可以开始将事情放到WCF上下文中。evaluationContext["PrimaryIdentity"]
用a PasswordIdentity
或custom 替换值IIdentity
。evaluationContext["Principal"]
用a PasswordPrincipal
或custom 替换值IPrincipal
。evaluationContext["Identities"]
集合以将GenericIdentity
实例替换为您的自定义实例。这样,您可以拥有一个自定义IPrincipal
实现,其中包含一些其他信息。
有关更多详细信息,请参阅此。
归档时间: |
|
查看次数: |
2273 次 |
最近记录: |