我一直在挖掘stackoverflow/security.stackexchange线程,并没有明确的答案为客户提供一种通用的方式来安全地使用我正在通过asp.net的web api构建的RESTful服务.在搜索这个答案时,我看到"授权"和"身份验证"可以互换使用,所以我想指出我只想验证请求身份和合法性.所以,在这一点上,我不是在验证用户.
亚马逊的模型似乎是"滚动你自己"时引用的模型,但是,在这种情况下,我确实理解亚马逊已经提供了每篇论文的"论文",所以这里没有太多的重新发明.这篇文章, 设计一个没有OAuth的安全REST(Web)API,非常有帮助.
我收集的是:
我对2的问题很少,或许,我的思绪无法绕过.首先,不是应该保密的app秘密吗?那么,如果一个javascript客户端发出请求,这不会影响app密钥的保密性吗?为什么有一个应用秘密然后我可以通过验证应用密钥,现时值和服务器IP验证请求身份?我确实理解像php,ruby或c#.net这样的服务器端语言不会暴露这个秘密,但我希望这对JS和编译语言来说都是普遍安全的.
最后,Facebook有一个开发人员安全检查表告诉开发人员"永远不要在客户端或可编译代码中包含你的App Secret",这会向我建议加密的web.config等.此解决方案不适用于将REST服务暴露给通过javascript消费的任何人.
其他线程我已经通过梳理:
http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/
https://developers.facebook.com/docs/facebook-login/安全性/
保护REST API/Web服务的最佳实践
REST身份验证方案的安全性
HTTP基本身份验证而不是TLS客户端认证
RESTful身份验证
我有一个指令,用于接收REST API中是否需要元素.现在,当属性设置为required时,我似乎无法使表单无效.
因此,本质上我能够从下面的指令动态添加'required'属性,但它不会使表单无效.通过chrome查看我发现,即使存在必需属性,$ error数组中的必需条目也不存在.
app.directive('requireiftrue', function ($compile) {
return {
require: '?ngModel',
link: function (scope, el, attrs, ngModel) {
if (!ngModel) {
return;
}
if(attrs.requireiftrue==="true"){
console.log('should require');
el.attr('required', true);
$compile(el.contents())(scope);
}
else{
console.log('should not require');
}
}
};
});
Run Code Online (Sandbox Code Playgroud)
这是一个解释问题的方法.而且,这是从我的rest API返回的示例JSON
{
race: false,
martialStatus: true,
}
Run Code Online (Sandbox Code Playgroud)
编辑:虽然接受的答案让我开始运行,但我仍然有很多需要做的事情.
即:1.解决延期承诺,以确保我的表单实际上收到必要的字段以进行验证2.观察我的'requireiftrue'属性
我的解决方案
模块配置:
function config($stateProvider) {
$stateProvider
.state('testState', {
url: '/test/form',
controller: 'TestCtrl',
templateUrl: 'test/form/testForm.tpl.html',
resolve: {
formDefaultService: function getFormDefaults($q, dataservice) {
// Set up a promise …Run Code Online (Sandbox Code Playgroud)