c# – REST API令牌认证
我刚开始在.NET中开发我的第一个REST API.由于它将是无状态的,我将使用令牌进行身份验证:
基本思想(System.Security.Cryptography): > AES用于加密HMACSHA256的完整性 登录: >检查凭据是否有效(用户名,比较哈希密码为db值) 请求认证方法: >用户发送每个请求的令牌 我看到的方式,这种方法有以下优点: >即使db被压缩,它也不包含实际的令牌(哈希不可逆转) 现在首先,我不知道这是否是好的方法. 除此之外,我还没有弄清楚,在服务器上存储AES和SHA256密钥的位置(我应该只是硬编码吗?如果我把它们放在web.config或者使用机器键比我在负载平衡的服务器的情况下有问题,…). 最后我在哪里存储AES IV向量,因为Crypto.CreateEncryptor需要它进行解密?这是否意味着用户必须向每个请求发送令牌IV? 我希望这有任何意义,我提前感谢你的答复. 更新: 好的,现在我做了更多的研究,并提出了这个解决方案: >令牌将包含最初指定的数据(用户名,发布日期和超时) >标签有效(令牌认证) >键将存储在web.config分开的部分.相同的键将必须在每个服务器上(当然应用程序) 我没有使用FormsAuthenticationTicket,因为在.NET中有以下问题: >相同的键用于不同的目的(用于查看状态,资源和形式标签的machinekey) 解决方法
这是从问题的评论线程的跟进.
对于什么,完全是OAuth,你似乎有点困惑,所以希望我可以在这里澄清. OAuth不是一个Web服务或者你消费的东西.这是一种协议,它描述了一个站点可以如何对服务进行身份验证的方式,而不允许站点知道用户的凭据是什么.大多数OAuth提供商也有一个优点:一个Web服务可以查询用户的信息,同时可以授予许可. 通常,您有兴趣从站点的角度实施OAuth(例如,AcmeWidgets.com),以便用户可以通过Facebook或Google登录.但是,您也可以实施服务端(例如,Facebook通常会在其中),并允许其他人对您进行身份验证. 所以,例如,假设您有一个Web服务,允许第三方网站为用户提供Acme品牌小部件.您的第一个第三方实施者是受欢迎的MyBook.org.流程将如下所示: >有人邀请用户在MyBook个人资料上使用“Acme Widgets”应用程序. http://acmewidgets.com/oauth/user?r=http://mybook.org/oauth/clientu0026amp;appid=12345 http://mybook.org/oauth/client?token=ABCDEFG http://acmewidgets.com/oauth/validate?token=ABCDEFGu0026amp;appid=12345u0026amp;appsecret=67890 http://acmewidgets.com/api/provision?appid=12345u0026amp;token=ABC123u0026amp;type=etc 这就是所谓的OAuth舞蹈.请注意,这里有一些实现定义的东西,如URL,编码各种令牌的方式,令牌是否到期或被撤销等. 希望为您清除一切! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |