C# 在HTTP头中使用令牌保护WCF RESTful
我正在创建一个WCF RESTful服务,该服务将通过在HTTP头中传递外部获得的身份验证令牌来保护。总之,顺序与此非常相似:C# 在HTTP头中使用令牌保护WCF RESTful,c#,wcf,rest,authentication,C#,Wcf,Rest,Authentication,我正在创建一个WCF RESTful服务,该服务将通过在HTTP头中传递外部获得的身份验证令牌来保护。总之,顺序与此非常相似: 客户端:从identity server获取身份验证令牌 客户端:构造REST调用,在自定义HTTP中放置身份验证令牌 标题 客户端:执行get Rest服务器:验证身份验证令牌是否存在 Rest服务器:查询标识服务器以验证令牌和 获取用户上下文 Rest服务器:授权用户Rest服务器: 执行维修行动 所以,我的问题是,在WCF/.NET中进行此操作的最佳方式是什么?我
public void DoSomething(string input)
{
if (Authed())
{
...Do DoSomething...
}
else
{
throw new FaultException<MyFault>(new MyFault("Not today, thanks"));
}
}
public bool Authed()
{
string rawUserAuthToken = WebOperationContext.Current.IncomingRequest.Headers["MyCustomHttpHeader"];
...Do the magic needed to verify and Authorise the incoming token...
return result;
}
public void DoSomething(字符串输入)
{
if(Authed())
{
…做点什么。。。
}
其他的
{
抛出newfaultexception(newmyfault(“今天不行,谢谢”);
}
}
公共bool Authed()
{
字符串rawUserAuthToken=WebOperationContext.Current.IncomingRequest.Headers[“MyCustomHttpHeader”];
…执行验证和授权传入令牌所需的魔法。。。
返回结果;
}
然而,我相信在WCF中有更优雅的方法来实现这一点。在做了一点谷歌搜索后,我遇到了SecurityTokenAuthenticator,但它似乎不符合我的需要
那么,有什么建议吗
编辑:这里的一个关键因素是解决方案必须是跨系统/语言中立的,客户机将基于几乎所有可以想象的技术堆栈,因此他们不能“仅仅添加一个服务引用”
谢谢您是否正在寻找一种方法,允许您在服务器上检查令牌,而无需在每个方法中写入
if(Authed())
?@YohDeadfall本质上是的,我希望用户在调用DoSomething()之前获得授权。我可能希望对不同的部署强制执行不同的安全模型/要求,将其置于功能方法之外会更容易。您可以使用IClientMessageInspector
执行身份验证,并使用IDispatchMessageInspector
验证令牌。或者使用IParameterInspector
对所有操作执行相同的操作。如果你愿意,我可以写一个例子。