gpt4 book ai didi

.net - 在 WCF 中填充 PrimaryIdentity

转载 作者:行者123 更新时间:2023-12-03 18:16:56 27 4
gpt4 key购买 nike

我使用简单的 HTTP header 将 token 传递给 WCF 服务以进行身份​​验证(WCF 服务需要使用 basicHTTPBinding,因此很遗憾我无法使用 jar 头 ws-security 实现)。我想填充 PrimaryIdentity 对象,以便 WCF 服务可以检查它以确定经过身份验证的用户。

问题在于OperationContext.Current.ServiceSecurityContext.PrimaryIdentity属性在我尝试填充它时是只读的。我已经尝试使用 SecurityTokenAuthenticators 和 IAuthorizationPolicy 对象来设置身份信息,但该路由似乎需要使用消息级安全性(例如始终发送用户名和密码),这不是我想要的。

任何人都可以阐明我如何设置 PrimaryIdentity 字段?

最佳答案

您可以创建一个实现 IAuthorizationPolicy 的类. WCF 解析所有身份 token (X509、WS-Security 用户名/密码等)并将它们放入您在 Evaluate 函数中获得的evaluationContext.Properties["Identities"] 中。这将返回一个列表给你。如果您用包含您自己的实现 IIdentity 的类的列表替换此列表然后 WCF 会将其读入 ServiceSecurityContext.Current.PrimaryIdentity .请确保列表只包含一项,否则您会混淆 WCF 和 PrimaryIdentity.Name将是空字符串。

var myIdentity = new MyIdentity("MyId", otherstuff);
evaluationContext.Properties["Identities"] = new List<IIdentity> {myIdentity};
此外,您可能希望在替换任何 token 之前处理/读取它们。
var identities = evaluationContext.Properties.ContainsKey("Identities")
? (List<IIdentity>) evaluationContext.Properties["Identities"]
: new List<IIdentity>();

var genericIdentity = identities.Find(x => x.AuthenticationType == "MyUserNamePasswordValidator");
genericIdentity.Name --> 包含来自 WSS 用户名 token 的用户名。
如果您使用 WS-Security 用户名 token 并且不想要任何默认的 WCF 验证,您将需要一个 UsernamePasswordValidator ( http://msdn.microsoft.com/en-us/library/system.identitymodel.selectors.usernamepasswordvalidator.aspx )。因为我们有一个 DataPower 设备在消息到达我们的服务之前验证 token ,所以我们不需要验证用户名和密码。在我们的例子中,它只返回 true。

关于.net - 在 WCF 中填充 PrimaryIdentity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2830294/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com