11

我正在尝试使用 asp.net web api 创建一个 REST 服务,一切正常,但我现在遇到了如何处理身份验证。

我有点困惑从哪里开始,这是我一直在想的。

我有一个包含许多资源的 REST api,每个资源都需要注册用户,那么这样做的最佳操作是什么?我是否应该在每次调用服务时在标头中发送用户名和密码,以便我可以使用在服务器上进行身份验证

AuthorizationFilterAttribute

我至少应该加密它?我很想知道其他人在做什么,我知道有一个创建令牌的概念(我认为这将是短暂的),因此用户将进行身份验证然后接收令牌,然后发送该令牌进一步调用该服务。那么当令牌过期时我将如何处理这个问题呢?

我还有一个用于注册新用户的资源,实际上唯一会调用它的是我的客户(Android、iPhone)。那么我应该让它免于任何身份验证方法或输入硬编码密码或类似的东西,以便至少没有其他人可以注册新用户吗?请记住,该服务将在互联网上公开。

我只是似乎无法找到正确的方法来做到这一点,我当然想第一次尝试就正确,所以我不必完全重构服务。

4

1 回答 1

11

以下链接似乎涵盖了一些明智的 DIY 选项http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/。“基于公钥/私钥的令牌”部分涵盖了我过去有效使用的一种方法,可能会对您有所帮助。

目前虽然我正在使用http://identityserver.codeplex.com/ Thinktecture IdentityServer 和 OAuth 不记名令牌(“资源所有者密码凭证”授权类型)......我发现这是一组非常好的代码和示例工作并让 IOS 客户端获取令牌并调用 WebApi。

如果您真的必须保护您的注册屏幕,您可以使用安装在设备上的客户端证书进行身份验证...... Thinktecture 服务可以在这里提供帮助https://identity.thinktecture.com/idsrv/docs/default.htm?RequestingatokenusingOAuth2。 .html _ 虽然如果您的注册过程是安全的 什么是带有 nonce 的电子邮件中的激活/注册/密码重置链接的最佳实践,例如电子邮件确认和激活等,但公开访问可能是安全的 - 这一切都取决于您的业务需求和所需的标志向上工作流程。

您至少应该使用传输级安全 SSL,但正如您建议的消息级安全性,例如加密任何令牌是非常可取的 - OAuth 规范对此http://self-issued.info/docs/draft-ietf-oauth有话要说-v2-bearer.html#mitigation

关于过期令牌 - 我们倾向于以与我们的密码更改策略相同的频率使令牌过期;虽然保持有效时间很重要(以尽量减少令牌盗窃的影响)并且考虑平衡您的要求。OAuth 有刷新令牌的概念为什么 OAuth v2 既有访问令牌又有刷新令牌?这里有一些关于这个主题的辩论和链接,我们目前没有使用这种方法,因为我们使用的 ID 服务器目前不支持这种方法。

确保您的令牌安全也是一个考虑因素,例如我们在 IOS 中使用 KeyChain,但如果可能的话,还要考虑移动设备管理策略,好像这些令牌或密码是它们可能被盗的设备之一,也许查看越狱检测、锁定屏幕执法等

于 2012-07-09T08:23:42.620 回答