C# 基于令牌的wcf限制

C# 基于令牌的wcf限制,c#,web-services,wcf,api,rest,C#,Web Services,Wcf,Api,Rest,我目前有一个基于WCF Rest的API,它使用基于令牌的身份验证来验证用户。但是,我现在需要实现一个附加的安全层,该层基于在核心层中进行任何API调用之前生成的令牌来限制用户 工作流程如下: 1) 用户调用API-1,API-1返回一个令牌。 2) 用户使用该令牌并调用核心API。核心API应该识别令牌,并且仅基于令牌向用户提供特定访问权限 例如,我有一个FormService类,它有3个方法:SaveForm、GetForm、AddUserToForm。 我需要生成一个FormService

我目前有一个基于WCF Rest的API,它使用基于令牌的身份验证来验证用户。但是,我现在需要实现一个附加的安全层,该层基于在核心层中进行任何API调用之前生成的令牌来限制用户

工作流程如下: 1) 用户调用API-1,API-1返回一个令牌。 2) 用户使用该令牌并调用核心API。核心API应该识别令牌,并且仅基于令牌向用户提供特定访问权限

例如,我有一个FormService类,它有3个方法:SaveForm、GetForm、AddUserToForm。 我需要生成一个FormService能够识别的令牌,以便只允许访问SaveForm或GetForm或所有方法。如果用户没有访问权限,则返回未经授权的错误消息。
我真的不知道如何解决这个问题。我不希望每次有人打电话检查访问时都查询静态映射表。我也不确定如何生成这些令牌,这些令牌随后可以用于特定访问。任何想法都会有帮助

我通常将令牌存储在WCF缓存中。 当用户第一次调用您的API时(假设他没有登录并且调用是身份验证),API验证身份(登录/密码),生成令牌,将其发送回用户并将其存储在缓存中(我通常每两小时使缓存失效一次)

要生成令牌,我使用以下方法:

var time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
var key = Guid.NewGuid().ToByteArray();
token = Convert.ToBase64String(time.Concat(key).ToArray());
关于这门学科的知识真的很好。 您可以找到有关基于令牌的身份验证的更多信息


希望有帮助。

那么你想高效地存储令牌吗?这就是问题所在吗?是的,以最高效的方式存储和使用令牌进行特定访问。