ASP.NET Web Api(REST):使用用户凭据或令牌进行身份验证?保留"注册新用户"资源密码?

Mar*_*tin 11 asp.net rest wcf-rest asp.net-authentication asp.net-web-api

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

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

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

AuthorizationFilterAttribute

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

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

我真的很感激任何人对此有任何反馈.

我似乎无法找到正确的方法,我当然希望第一次尝试正确,所以我不必完全重构服务.

提前致谢

Mar*_*nes 11

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

目前虽然我正在使用http://identityserver.codeplex.com/带有OAuth承载令牌的Thinktecture IdentityServer("资源所有者密码凭证"授权类型)...我发现这是一组非常好的代码和示例从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,但如果可能的话,还要考虑移动设备管理策略,好像这些令牌或密码是他们可能被窃取的设备之一,也许会看到越狱检测,锁定屏幕执法等