因此,过去几天我一直在试图了解WCF的安全架构是如何运作的。我有一个目标,我不确定我是否朝着正确的方向前进。
系统
我们使用Active Directory和数据库的组合来管理我们的身份验证和授权。客户端应用程序通常使用其Windows凭据进行身份验证,应用程序检查数据库表以查看是否允许这些用户进行身份验证,然后是否有权使用他们请求的资源。当前设置使每个客户端直接与数据库通信以执行这些检查。
目标
我们希望使用安全令牌服务来验证客户端,并为顶级资源提供“高级”授权。如果提供的SecurityToken有效,则提供数据或执行操作的服务将运行。此外,如果令牌不包含特定权限,则会查询令牌服务以查看用户是否确实拥有在最初创建令牌时未加载的权限。 (我们的数据库拥有超过300项权利,这可能会为拥有多项权利的用户带来相当大的权限)
我不明白
1)我理解令牌创建过程,但我对客户端如何获取,存储并将令牌发送到它打算使用的服务有点迷失。每个“工作”服务是否需要一个唯一的令牌(即调用CalculatorService需要一个版本的令牌,而SaveResultService需要生成一个新令牌?)我可以手动请求,保存和发送令牌吗?
2)在“工人”服务方面,验证令牌的过程是什么?我的“工作”服务是否必须联系令牌服务以验证令牌?或者它只是读取令牌并假设,如果签名正确,令牌是真的并从这个角度操作?
3)是否可以手动加密我的令牌并将它们存储在客户端以便在它们有效时使用(从而避免在每次服务调用时进行身份验证尝试),以便Web客户端可以在页面加载和在连续的电话中重复使用它?
感谢您帮助我缺乏理解
答案 0 :(得分:2)
您应该查看Windows Identity Foundation的示例 - 它提供了包装您可以使用或查询auth和authz的声明所需的类和实现。
http://msdn.microsoft.com/en-us/library/ee517291.aspx
您正在寻找的是持久的令牌缓存。 - 令牌有生命周期,通常需要更新,WIF可以在大多数情况下进行更新。
您可以使用WIF手动请求和附加令牌并汇集代理。