我刚刚开始研究wcf服务构建一个Web应用程序来使用我的服务。我根据每个请求中的令牌传递令牌,然后在数据库的每个请求上检查该令牌是否有效。我认为每次向db发送额外请求都不好。那么,这是否可以在用户第一次登录或首次提出服务请求时对用户进行身份验证,之后直到会话保持我的所有请求都使用令牌?
我在谷歌搜索,但每个人都在告诉如何通过服务进行身份验证。
答案 0 :(得分:0)
而不是您生成并需要检入数据库的随机字符串,而不是像许多身份验证模块那样使您的令牌围绕加密和/或签名。
换句话说,从用户/应用程序名称构建令牌,发布日期和/或到期日期,对其进行加密,并且您拥有一个不需要任何数据库查找进行验证的自包含令牌。
为便于加密,可以使用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 ) ) );
答案 1 :(得分:0)
在每个请求上使用数据库检查Auth令牌可能是一个坏主意。通常用作令牌的是当前用户主体本身,但是已经序列化和加密。 生成令牌并在登录时返回给客户端。然后在每个请求上传递令牌服务,然后让您有机会对其进行反序列化并填充System.Threading.Thread.CurrentPrincipal,而无需往返数据库。
查看这些SO答案以获得更多见解