.net 向OperationContext.RequestContext.RequestMessage添加值是否安全?

.net 向OperationContext.RequestContext.RequestMessage添加值是否安全?,.net,wcf,authorization,.net,Wcf,Authorization,我正在开发一个使用授权令牌的WCF服务,其中令牌解析为用户名。访问是一种全有或全无的事情:拥有有效令牌的人应该能够做任何事情,而没有有效令牌的人应该被拒绝 我设置了一个授权管理器,如下所示: public class AuthorizationManager : ServiceAuthorizationManager { protected override bool CheckAccessCore(OperationContext operationContext) {

我正在开发一个使用授权令牌的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[用户名]访问此值


我的问题是,我能相信这种技术吗?用户是否可能伪造RequestMessage.Properties中的值,或者这仅在WCF服务类内部使用?有没有更好的地方来存储数据,这样就不会被用户操纵?

为什么要这样获取用户名?如果您是在寻找调用您的服务的用户,您可以直接从操作上下文中获取它,而无需客户端传入。不,您不能信任它,因为如果您查看请求消息属性,任何人都可以伪造它@好问题。我可以在每个服务方法中进行令牌到用户名的解析,并且不会有太大的不同。目前,令牌是让用户调用服务的唯一方法,因为我们没有使用Windows身份验证。所以我猜您使用的是cert?