我正在阅读有关WebApi授权的几个资源(书籍和SO答案).
假设我想添加自定义属性,该属性仅允许特定用户访问:
情况1
我已经看到了这种覆盖的 方法, OnAuthorization如果出现问题就会设置响应
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
Run Code Online (Sandbox Code Playgroud)
案例#2
但是我也看到了这个类似的例子,它也覆盖了 OnAuthorization但是要求base:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
然后,检查是否
HttpActionContext.Response已设置.如果未设置,则表示请求已获得授权且用户可以
案例#3
但我也看到了这种覆盖的方法IsAuthorized :
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override …Run Code Online (Sandbox Code Playgroud) 我正在学习Apigility(Apigility docu - > REST Service Tutorial)并尝试通过cURL发送带有基本身份验证的POST请求:
$ curl -X POST -i -H "Content-Type: application/hal+json" -H "Authorization: Basic YXBpdXNlcjphcGlwd2Q=" http://apigilityhw.sandbox.loc/status
Run Code Online (Sandbox Code Playgroud)
YXBpdXNlcjphcGlwd2Q=是我的凭据的基本64编码字符串apiuser:apipwd.凭证保存在/data/htpasswd(apiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/)中.
看起来像这样:
HTTP/1.1 401 Unauthorized
Server: nginx/1.4.7
Date: Mon, 22 Sep 2014 07:48:47 GMT
Content-Type: application/problem+json
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.5.12-1~dotdeb.1
WWW-Authenticate: Basic realm="api"
Run Code Online (Sandbox Code Playgroud)
这里的错误在哪里?如何让它工作?
我想将Authorization添加到控制器,同时为多个角色添加.
通常情况如下:
[Authorize(Roles = "RoleA,RoleB,RoleC")]
public async Task<ActionResult> Index()
{
}
Run Code Online (Sandbox Code Playgroud)
但是我已经将我的角色存储在了角落中,因为它们可能会在某些时候改变或扩展.
public const RoleA = "RoleA";
public const RoleB = "RoleB";
public const RoleC = "RoleC";
Run Code Online (Sandbox Code Playgroud)
我不能这样做,因为字符串必须在编译时知道:
[Authorize(Roles = string.join(",",RoleA,RoleB,RoleC)]
public async Task<ActionResult> Index()
{
}
Run Code Online (Sandbox Code Playgroud)
有没有办法规避问题?
我可以编写一个只包含"RoleA,RoleB,RoleC"的const - 但我不喜欢魔术字符串,这是一个神奇的字符串.更改角色名称而忘记更改组合字符串将是一场灾难.
我正在使用MVC5.ASP.NET Identity和Role在编译时是已知的.
我有一个MVC webapi站点,它使用OAuth /令牌身份验证来验证请求.所有相关的控制器都具有正确的属性,并且身份验证正常.
问题是并非所有请求都可以在属性范围内被授权 - 某些授权检查必须在由控制器方法调用的代码中执行 - 在这种情况下返回401未授权响应的正确方法是什么?
我试过了throw new HttpException(401, "Unauthorized access");,但是当我这样做时,响应状态代码是500,我也得到了堆栈跟踪.即使在我们的日志记录DelegatingHandler中,我们也可以看到响应是500,而不是401.
我已经使用SVN建立了一个存储库并上传了项目.有多个用户在处理这些项目.但是,并非所有人都在处理所有项目并需要访问权限.我想为每个项目的用户设置权限.
我该如何实现这一目标?
我需要在向API发送请求时对客户端进行身份验证.客户端有一个API令牌,我正在考虑使用标准Authorization头将令牌发送到服务器.
通常,此标头用于Basic和Digest身份验证.但我不知道是否允许自定义此标头的值并使用自定义身份验证方案,例如:
Authorization: Token 1af538baa9045a84c0e889f672baf83ff24
Run Code Online (Sandbox Code Playgroud)
你会推荐这个吗?或者是否有更好的方法来发送令牌?
我在理解OAUTH-v2如何工作方面遇到了一些麻烦.
该OAuth的版本2的规格如下:
访问受保护的资源
客户端通过向
资源服务器提供访问令牌来访问受保护资源.资源服务器必须验证
访问令牌并确保它没有过期,并且其范围涵盖
所请求的资源.资源服务器用于
验证访问令牌(以及任何错误响应)的方法超出了本规范的范围,但通常涉及资源服务器和授权
服务器之间的交互或协调.
资源服务器和授权服务器之间的这种交互如何在实践中工作?
访问令牌属性和用于访问受保护资源的方法超出了本规范的范围,并由协同规范定义.
有人可以提供令牌属性的示例吗?
我正在为内部企业软件平台构建一个多页面管理界面.想想许多粘合逻辑将各种API,数据库查询和shell脚本捆绑在一起.
我们将使用node.js,express框架(包括jade模板)和LDAP进行身份验证.
我正在努力寻找有关节点应用程序授权的设计模式和最佳实践的信息.最好,我想使用基于角色的模型,因为我的用户熟悉这种方法及其护理和喂养.
我是node.js的新手,所以请不要假设我已经看过一个模块或热门博客文章.可能有大量的信息,我根本不知道在哪里看.
提前感谢您提供的任何信息!
通常使用以下方法之一阻止跨站点请求伪造(CSRF):
我的想法是使用用户秘密,一个神秘但静态的表单ID和JavaScript来生成令牌.
<form method="POST" action="/someresource" id="7099879082361234103">
<input type="hidden" name="token" value="generateToken(...)">
...
</form>
Run Code Online (Sandbox Code Playgroud)
GET /usersecret/john_doe 由经过身份验证的用户从JavaScript中获取.OK 89070135420357234586534346这个秘密在概念上是静态的,但可以每天/每小时更改......以提高安全性.这是唯一保密的事情.generateToken(7099879082361234103, 89070135420357234586534346)这种方法有问题,尽管事实上没有JavaScript它不起作用吗?
附录:
我正在开发一个ASP.NET MVC 5应用程序.我有一个现有的数据库,我从中创建了我的ADO.NET实体数据模型.我在该DB中有一个包含"username"和"password"列的表,我想用它们在我的Webapp中实现身份验证和授权; 我无法创建任何其他数据库或表或列,因为客户的要求,我无法使用标准身份验证.我不需要管理注册,密码更改或其他内容:只需使用密码和用户名登录.我怎样才能做到这一点?
c# authentication asp.net-mvc authorization asp.net-identity
authorization ×10
asp.net-mvc ×3
c# ×3
http ×3
rest ×2
security ×2
api ×1
apigility ×1
asp.net ×1
csrf ×1
curl ×1
express ×1
http-headers ×1
node.js ×1
oauth ×1
oauth-2.0 ×1
svn ×1
web-services ×1