c# - 从 UserNamePasswordValidator 到 Principal 的变量

标签 c# .net wcf authentication authorization

我有一个带有 netTcp 绑定(bind)(消息 - 用户名)的 WCF 服务。

我实现了我自己的 UserNamePasswordValidator.Validate 方法,在这个方法中我检查了凭据并在那里我得到了一个变量,稍后我需要在我的 customPrincipal 中使用它。

我现在的问题是,如何将这个变量从我的 UserNamePasswordValidator 获取到 customPrincipal?

编辑

让它工作,我必须实现以下自定义的东西:

  • 自定义服务凭证
  • ServiceCredentialsSecurityTokenManager
  • 用户名SecurityTokenAuthenticator
  • 用户名密码验证器
  • -> 使用带返回值的自定义验证方法
  • 授权政策

最佳答案

UserNamePasswordValidator 仅用于检查凭据。您可能需要 System.IdentityModel.Policy.IAuthorizationPolicy。查看 this question 的答案.

更新:问题是 OperationContextUserNamePasswordValidator 中尚不可用,因此您不能使用它来将上下文变量传递给您可以实例化自定义主体 (IAuthorizationPolicy) 的位置。因此,我将创建一个以用户名为键的静态字典(如果我没看错的话,值是您的身份验证方法)可用于自定义 UserNamePasswordValidatorIAuthorizationPolicy 实现。如果您使用的是 .NET 4,ConcurrentDictionary 是正确的选择,因为您需要处理并发问题。所以你的验证器将插入/更新用户名/auth-method 对到字典中,你的 IAuthorizationPolicy 类将通过用户名获取它(你可以从 EvaluationContext 获得它)并重新 -实例化主体。不幸的是,我无法想象更优雅的解决方案(如果有的话)。

关于c# - 从 UserNamePasswordValidator 到 Principal 的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7963742/

相关文章:

c# - LINQ 中 select 和 where 之间的区别

c# - 使用结构体作为方法的输入有不利的一面吗?

c# - 阿拉伯文本框

c# - 通用属性缺点?

C# 入口点函数

c# - 将嵌套的 JSON 转换为 CSV

c# - EF Core 3.1 到 5 更新 -> IEntityType.GetTableName

c# - 如何修改 wcf 服务方法的 json 结果的名称

c# - WSHttpBinding TransportWithMessageCredential SecurityMode 改变请求

wcf - Visual Studio 2012 安装破坏了我的 2010 WCF 项目