Asp.net mvc Html.AntiForgeryToken仅具有IIdentity属性

Asp.net mvc Html.AntiForgeryToken仅具有IIdentity属性,asp.net-mvc,wif,Asp.net Mvc,Wif,我有一个实现IIdentity的自定义标识,但它不是从ClaimsEntity继承的。在过去,只要实现了IIdentity,您就可以拥有一个工作正常的自定义标识 我已让ClaimsAuthenticationManager将外部SSO进程映射到我的自定义标识上。由于每个提供者都可以提供不同的声明集,因此我使用ClaimsAuthenticationManager将它们映射到适当的离散属性上。提供程序不提供任何权限。所有权限都在应用程序数据库中管理。也就是说,我只是利用外部身份验证,但授权是通过我

我有一个实现IIdentity的自定义标识,但它不是从ClaimsEntity继承的。在过去,只要实现了IIdentity,您就可以拥有一个工作正常的自定义标识

我已让ClaimsAuthenticationManager将外部SSO进程映射到我的自定义标识上。由于每个提供者都可以提供不同的声明集,因此我使用ClaimsAuthenticationManager将它们映射到适当的离散属性上。提供程序不提供任何权限。所有权限都在应用程序数据库中管理。也就是说,我只是利用外部身份验证,但授权是通过我自己的数据库管理的

问题在于,AntiForgeryConfig.UniqueClaimTypeIdentifier似乎要求我的自定义标识继承自ClaimsEntity。我看不到ClaimsEntity继承自IIdentity之外的任何接口。这意味着,就我所知,我唯一的选择是从ClaimSideEntity继承,同时继承许多其他方法/属性,我对在自定义标识中公开这些方法/属性不感兴趣。只是为了支持

换句话说,当使用这样的标识时:

public class CustomIdentity : IIdentity
{

    public int UserId { get; set; }
    public string Name { get; set; }
    public string AuthenticationType { get; set; }
    public bool IsAuthenticated { get; set; }
    public int SomeCustomProperty { get;set;}
    public List<CustomPermissions> Permissions {get;set;}
}
使用这种方法,身份验证工作得非常好。反伪造令牌似乎不应该依赖于具体的ClaimSideEntity实现。这似乎很荒谬,迫使我使用如此沉重的身份

是否有一种方法可以使用
Html.AntiForgeryToken
,而无需
ClaimsEntity
(同时仅使用基于声明的身份提供程序进行初始身份验证)?

public class KentorAuthenticationManager : ClaimsAuthenticationManager
{
    public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
    {

        ClaimsIdentity claimsIdentity = (ClaimsIdentity)incomingPrincipal.Identity;

        // create our custom identity
        var customIdentity = new CustomIdentity();
        customIdentity.IsAuthenticated = claimsIdentity.IsAuthenticated;
        customIdentity.AuthenticationType = claimsIdentity.AuthenticationType;
        customIdentity.Name = claimsIdentity.Name;

        // ...if IsAuthenticated, use SAML NameId to 
        //        find user with matching AuthenticationUserExternalId in our database
        // ...initialize CustomIdentity.Permissions from database

        GenericPrincipal newPrincipal = new GenericPrincipal(customIdentity, null);          
        return newPrincipal;

    }

}