C# 如何使用Kentor AuthService获取其他断言属性
我正在基于WebForms的应用程序中使用Kentor HttpModule。 我需要用loggin获得附加信息。我不确定,但我认为Kentor只解析attributeID=“userId”,我需要获得更多的属性 我是否需要fork和修改Kentor以使这些值在我的应用程序中可用,或者它们存储在某个地方 我在Saml2Response中看到了从AllAssertionElementNodes方法返回的xmlElements集合,但我不知道如何在app中访问它们 要访问ID,我正在使用此扩展方法:C# 如何使用Kentor AuthService获取其他断言属性,c#,saml-2.0,claims-based-identity,kentor-authservices,C#,Saml 2.0,Claims Based Identity,Kentor Authservices,我正在基于WebForms的应用程序中使用Kentor HttpModule。 我需要用loggin获得附加信息。我不确定,但我认为Kentor只解析attributeID=“userId”,我需要获得更多的属性 我是否需要fork和修改Kentor以使这些值在我的应用程序中可用,或者它们存储在某个地方 我在Saml2Response中看到了从AllAssertionElementNodes方法返回的xmlElements集合,但我不知道如何在app中访问它们 要访问ID,我正在使用此扩展方法:
public static string GetNameID(this IIdentity identity)
{
var claimsIndentity = identity as ClaimsIdentity;
if (string.IsNullOrWhiteSpace(claimsIndentity)
{
return string.Empty;
}
var providerQuery = from c in claimsIndentity.Claims
where c.Type.EndsWith("/identity/claims/nameidentifier")
select c.Value;
var provider = providerQuery.FirstOrDefault();
return provider;
}
这是:
if (User.Identity.IsAuthenticated)
{
userId = User.Identity.GetNameID();
}
有什么建议吗
更新
我相信这是一个适当的解决办法。在AcsCommand中的ProcessResponse方法中,我们有一个samlResponseInnerXML,从那里我们可以解析想要的数据、创建额外的声明,或者其他什么,所以现在我有了一个解决方案(可能解决我的问题)。还有其他更优雅的解决方案吗?Kentor.AuthServices SP将断言中的所有属性转换为声明。如果在
GetNameID
方法中设置断点并检查claimsIdentity.Claims
枚举,则所有属性都应该在那里。如果他们没有,请在上提交问题。是的,他们在那里。谢谢!这比我的解决方案更优雅。我编写了一个自定义解析器来从响应XML中提取它们。此外,我没有看到您在IdP解决方案中使用相同的逻辑,将所有附加声明转换为属性。将所有声明转换为属性或相反,是否有任何不利之处?我的意思是,对于我的案例来说,这很好,但一般来说?不,属性和声明实际上只是同一事物的两个名称。在极少数需要过滤声明的情况下,这可以通过ClaimsAuthenticationManager
完成。我是否可以在不使用自己的解析器的情况下以某种方式访问saml2:Subject saml2:NameID值?NameID也会转换为声明。这在代码中是什么?我看到所有语句都被转换为属性,属性被转换为声明。但对于这个主题,这个主题只是用来生成像素。