Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 将身份验证令牌传递给wcf一次_Asp.net_Wcf_Webforms_Restful Authentication - Fatal编程技术网

Asp.net 将身份验证令牌传递给wcf一次

Asp.net 将身份验证令牌传递给wcf一次,asp.net,wcf,webforms,restful-authentication,Asp.net,Wcf,Webforms,Restful Authentication,我刚开始使用wcf服务构建一个web应用程序来使用我的服务。我在每个请求中传递该令牌,然后在数据库中的每个请求中检查该令牌是否有效。我认为每次向db发送一个额外的请求是不好的。所以,这是否可能在用户首次登录或首次请求服务时对其进行身份验证,然后直到会话保持为止,我的所有请求都与令牌一起工作 我在谷歌上搜索过,但每个人都在告诉如何使用服务进行身份验证。与许多身份验证模块一样,使用加密和/或签名作为令牌,而不是生成并需要在数据库中进行检查的随机字符串 换句话说,从用户/应用程序名称、发行日期和/或到

我刚开始使用wcf服务构建一个web应用程序来使用我的服务。我在每个请求中传递该令牌,然后在数据库中的每个请求中检查该令牌是否有效。我认为每次向db发送一个额外的请求是不好的。所以,这是否可能在用户首次登录或首次请求服务时对其进行身份验证,然后直到会话保持为止,我的所有请求都与令牌一起工作


我在谷歌上搜索过,但每个人都在告诉如何使用服务进行身份验证。

与许多身份验证模块一样,使用加密和/或签名作为令牌,而不是生成并需要在数据库中进行检查的随机字符串

换句话说,从用户/应用程序名称、发行日期和/或到期日期构建一个令牌,对其进行加密,这样您就拥有了一个自包含的令牌,不需要任何数据库查找来进行验证

为了便于加密,可以使用MachineKey

旁注—这是窗体身份验证/会话身份验证模块的工作方式。您有携带身份验证信息的cookie令牌。你可以考虑切换到这些。

编辑:您询问的一个示例:

// create token
string username = "foo";
string token = Convert.ToBase64String( MachineKey.Protect( 
                  Encoding.UTF8.GetBytes( username ) ) );

// get username out of token
string token = ....;
string username = Encoding.UTF8.GetString( MachineKey.Unprotect( 
                  Convert.FromBase64String( token ) ) );

在每个请求上用数据库检查Auth令牌可能是个坏主意。通常用作令牌的是当前用户主体本身,但已序列化和加密。 该令牌在登录时生成并返回给客户端。然后,在每次请求时,您都会将令牌传递给服务,从而使您有机会对其进行反序列化并填充System.Threading.Thread.CurrentPrincipal,而无需往返数据库

检查这些答案,以获得更多信息


你将什么样的令牌传递给服务?它只是在用户创建时生成的随机字符串你可以举个例子,我不明白,我用一个基本的例子编辑了我的答案,这个例子应该能让你了解如何设计自己的令牌。在取出令牌之后,我该怎么做?我该如何验证这是一个真正的客户端,需要使用我的服务,即使在这种情况下,我也需要调用数据库。所以,你能解释一下吗?我有很多客户将使用我的服务,每个客户都有不同的令牌,因此,如何知道哪个客户在呼叫,以及客户是在呼叫还是伪造令牌?因为令牌在服务器上加密,所以真的没有办法在客户端伪造它们。