- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发 .net 的 REST 库,我想听听一些关于我的开放点的意见:REST 和身份验证。
以下是与该库一起使用的 RESTful 接口(interface)的示例:
[RestRoot("/user")]
public interface IUserInterface
{
[RestPut("/")]
void Add(User user);
[RestGet("/")]
int[] List();
[RestGet("/get/{id}")]
User Get(int id);
[RestDelete("/delete/{id}")]
void Delete(int id);
}
服务器代码只需实现该接口(interface),客户端可以通过工厂获取相同的接口(interface)。或者,如果客户端不使用该库,标准 HTTP 请求也可以工作。
我知道有使用 HTTP 基本身份验证或向需要经过身份验证的用户的请求发送 token 的主要方法。
第一种方法(HTTP 基本身份验证)存在以下问题(部分特定于 Web 浏览器):
第二种方法的问题更集中在实现和库的使用上:
[RestGet("/get/{id}")]
与 [RestGet("/get/{id}/{token}")]
。我的想法是将 token 作为参数传递给 URL,例如 http:/server/user/get/1234?token=token_id
。
另一种可能性是将参数作为 HTTP header 发送,但我猜这会使普通 HTTP 客户端的使用变得复杂。
token 将作为每个请求的自定义 HTTP header (“X-Session-Id”)传回客户端。
这可以完全从接口(interface)中抽象出来,任何需要身份验证的实现都可以只询问 token (如果给定)属于哪个用户。
您认为这会过于违反 REST 还是您有更好的想法?
最佳答案
我倾向于认为身份验证详细信息属于 header ,而不是 URI。如果您依赖于放置在 URI 上的 token ,则应用程序中的每个 URI 都需要进行编码以包含该 token 。它还会对缓存产生负面影响。 token 不断变化的资源将无法再被缓存。与资源相关的信息属于 URI,而不是与应用程序相关的数据(例如凭据)。
看来您必须将网络浏览器作为客户端?如果是这样,您可以使用 HTTP Digest access authentication 进行调查或向客户端颁发自己的 SSL 证书以唯一地识别和验证它们。另外,我不认为 session cookie 一定是坏事。尤其是在必须处理浏览器时。只要您隔离 cookie 处理代码并使应用程序的其余部分不依赖它就可以了。关键只是在 session 中存储用户的身份,没有其他。不要滥用服务器端 session 状态。
如果您的目标客户不是浏览器,那么您可以采取多种方法。我很幸运地使用了亚马逊的S3 Authentication机制。
当然,这都是非常主观的。纯粹性和严格遵循 REST 有时可能是不切实际的。只要您最大限度地减少并隔离此类行为,应用程序的核心仍然可以是 RESTful。我强烈推荐RESTful Web Services作为 REST 信息和方法的重要来源。
关于authentication - REST 和身份验证变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/458482/
我正在创建一个连接到 firebase 的应用程序。但我面临一些问题。当同步我的 gradle 文件时,我收到此警告 WARNING: API 'variant.getMergeResources()
想知道是否有任何方法可以将变体分配给自定义 radio 输入?我想为 2 天、3 天和标准运输设置不同费率的分级运输。我可以使用变体来做到这一点,但下拉菜单对我不起作用。我想要日期信息和日期选择器,以
我是 Haskell 的新手。鉴于 Haskell 的整个前提是函数将始终返回相同的值,我希望有某种方式,例如在编译时计算常量的斐波那契值,就像我可以在 C++ 中使用模板元编程一样,但我不知道该怎么
我是 OCaml 的新手,但过去两天一直在工作,以便更好地了解如何使用它。我最近做了很多事情,但有些事情阻碍了我前进。 我正在尝试在 OCaml 中实现 evaexpr。使用这种语言非常容易,你会说:
我有一个使用一些typedef的std::variant的代码库。 最初,它们是不同的类型,但现在它们像下面的示例一样重叠 typedef int TA; typedef int TB; std::v
鉴于此: data Foo = Bar { name :: String } | Baz { nickname :: String } 函数 name 和 nickname 似乎都是 Foo -> S
嘿,我猜这可能相当微不足道,但我很难找到答案或弄清楚它。 我正在尝试创建一个带有任意间距的彩色方 block 网格。这本身很容易做到,特别是因为我只需要九个正方形。但是虽然我看着我完成的代码,我不禁觉
我有 woocommerce 设置,其中包含产品和这些产品的变体。当我更改变化时(例如,产品的尺寸(340克或900克),我希望它在页面上动态更新价格,以便人们可以看到两种尺寸之间的价格差异。目前,我
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
在我的一节课上,我被问到这是一个脑筋急转弯,但我无法弄明白(这不是家庭作业问题,只是其中一位助教给我们的一个脑筋急转弯让我们思考)。 给你一根杆,上面有 n 个要切割的点,例如 [1,5,11],以及
关于 CRP如果我想实现它的细微变化(使用模板模板参数),我会得到一个编译错误: template class Derived> class Base { public: void Call
我正在创建一个 woocommerce 主题,并且我有产品变体,即显示在产品详细信息页面上的尺寸,但问题是我想通过使用产品 ID 在我的自定义 php 页面中获取所有变体,任何人都可以帮助我。 提前致
我正在使用 Ionic 开发移动应用程序,我必须与 Twitter API 连接。 所以我使用 ng-cordova 和 $cordovaAuth .但是当我这样做时: $cordovaOauth.t
这里的网站有一个音乐播放器http://www.numberonedesigns.com/ubermusic.com/ ...当点击下一个按钮并随机突出显示时,它不会正确随机化。它总是返回到播放列表中
我有列 sql 变体,其含义如下:100, 150, D1我正在尝试根据特定逻辑将列中的所有数字转换为字母(例如 D1)以防万一。但是 150 有空格并且 CASE WHEN 不起作用。 这是我正在使
有没有一种快速方法可以用从匹配模式派生的数据替换所有出现的某些模式? 例如,如果我想将字符串中出现的所有数字替换为用 0 填充到固定长度的相同数字。 在本例中,如果长度为 4,则 ab3cd5 将变为
我目前正在寻找生成具有特定位数的数字列表,我的代码当前如下: | Python 2.7 | import itertools inp = raw_input('Number of digits to
我正在对类型系统进行研究。对于这项工作,我正在研究流行语言中变体、结构子类型、通用多态性和存在多态性的用法。像 heskell、ocaml 这样的功能性语言提供了这样的功能。但我想知道像 C++ 这样
这是 variant.hpp 文件中的相关代码(可在此处找到 http://www.boost.org/doc/libs/1_49_0/boost/variant/variant.hpp) templ
您好,我有两个具有多对多关系的表和一个联结表。简而言之,具有不同属性的产品也随之增加了价格。为了更清楚地说明我是产品和属性表。 +-------------+------------+--------
我是一名优秀的程序员,十分优秀!