将身份验证令牌传递给wcf一次
问题描述:
我刚开始使用wcf服务构建Web应用程序以使用我的服务。我做了这个令牌,我在每个请求中都传递了令牌,然后在数据库的每个请求中检查它的有效与否。我认为这是不好的每次发送一个额外的请求数据库。那么,当用户第一次登录或首次向服务请求时,这是否有可能对用户进行身份验证,然后直到会话保持所有请求都使用令牌?将身份验证令牌传递给wcf一次
我在谷歌搜索,但每个人都告诉如何与服务进行身份验证。
答
取代您生成并需要在数据库中进行检查的随机字符串,使您的令牌围绕加密和/或签名,就像许多验证模块一样。
换言之,从用户/应用程序名称,发布日期和/或失效日期构建令牌,对其进行加密,并且您拥有一个自包含的令牌,不需要任何数据库查找进行验证。
为了便于加密,则MachineKey
可用于
http://msdn.microsoft.com/en-us/library/system.web.security.machinekey%28v=vs.110%29.aspx
一个侧面说明 - 这是何等的窗体身份验证/会话验证模块的工作。您拥有携带验证信息的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)));
答
检查验证令牌在每个请求的数据库可能是一个坏主意。通常用作令牌的是当前用户主体本身,但是是序列化和加密的。 令牌生成并在登录后返回给客户端。然后在每个请求上传递该令牌的服务,然后让您有机会反序列化它并填充您的System.Threading.Thread.CurrentPrincipal而无需往返于数据库。
检查这些所谓的更深入的了解
你传递给服务什么样的令牌的答案? – khlr 2014-12-28 18:40:13
它只是一个随机字符串在用户创建时生成 – Ancient 2014-12-28 19:15:43