我有自定义安全令牌和自定义IAuthorizationPolicy
,如下所示:
public class TestAuthorizationPolicy : IAuthorizationPolicy
{
public TestAuthorizationPolicy(string name, string someData, string moreData)
{
this.Name = name;
this.SomeData = someData;
this.MoreData = moreData;
var claims = new[]
{
new Claim("http://text.example.com/Claims/Name", this.Name, Rights.Identity),
new Claim("http://text.example.com/Claims/SomeData", this.SomeData, Rights.PossessProperty),
new Claim("http://text.example.com/Claims/MoreData", this.MoreData, Rights.PossessProperty),
};
this.Id = SecUid.Create().ID;
this.Issuance = new DefaultClaimSet(claims);
this.Issuer = this.Issuance.Issuer;
}
private string Name { get; set; }
private string SomeData { get; set; }
private string MoreData { get; set; }
private ClaimSet Issuance { get; set; }
public string Id { get; private set; }
public ClaimSet Issuer { get; private set; }
public bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
evaluationContext.AddClaimSet(this, this.Issuance);
var identity = new GenericIdentity(this.Name, "Custom");
evaluationContext.Properties["Identities"] = new IIdentity[] { identity };
evaluationContext.Properties["Principal"] = new GenericPrincipal(identity, new string[0]);
return true;
}
}
服务方法具有我的CAS属性,该属性反过来返回我的IPermission
,这确保当前安全上下文具有由策略提供的执行操作所需的声明。
大多数情况下这很好用。但是在一些罕见的CAS执行不同的线程,然后执行我的策略的线程。因此,在这种情况下,ServiceSecurityContext为空。没有任何授权政策,没有任何声明,没有身份,没有。
因此,令牌被服务器接收,成功解析,安全数据被设置并且......丢失了?为什么会这样?怎么处理呢?
还试图摆脱CAS并在服务方法中进行所有检查。同样的问题 - 策略和服务的不同线程导致空的安全上下文。