我正在使用授权令牌的WCF服务,其中令牌解析为用户名。访问是一种全有或全无的事情:拥有有效令牌的人应该能够做任何事情,没有有效令牌的人应该被拒绝。
我已经设置了这样的授权管理器:
public class AuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
var query = operationContext.IncomingMessageProperties.Via.Query;
var parameters = HttpUtility.ParseQueryString(query);
var token = parameters["token"];
if (TokenIsValid(token)) {
var username = GetUsername(token);
operationContext.RequestContext.RequestMessage.Properties.Add("username", username);
return true;
} else {
return false;
}
}
}
以为我稍后会使用OperationContext.Current.RequestContext.RequestMessage.Properties["username"];
我的问题是,我能相信这种技巧吗?用户是否可以欺骗RequestMessage.Properties
中的值,或者仅在WCF服务类内部使用?有没有更好的地方存储数据,因此无法由用户操纵?