基于令牌的授权Web API

时间:2013-10-26 18:54:05

标签: c# asp.net-web-api

我正在使用backbone.js和web api构建应用程序。 JS客户端将发送ajax请求来访问api。构建API非常简单,但我想实现API的身份验证和授权。

我计划在成功验证后返回令牌,并将此令牌用于进一步的请求。此令牌将在HTTP Authorization标头中传递。 我的要求如下 1)验证每个请求上的令牌并获取用户ID。 2)使用获取的用户ID进行进一步操作。

可以使用自定义操作过滤器处理第一位,其中可以针对数据库验证永久令牌。 但我无法找到任何样本或示例做第二位。我希望从传递的令牌中获取用户ID并将其进一步传递以供以后处理。 这有什么办法吗?

等待建议或想法。任何代码示例都会有所帮助。提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以在成功进行令牌验证后设置Thread.CurrentPrincipal,如下所示:

IPrincipal principal = new GenericPrincipal(new GenericIdentity(username), null);

Thread.CurrentPrincipal = principal;
// if we're running in IIS...
if ( HttpContext.Current != null )
    HttpContext.Current.User = principal;

主体也可能是实现System.Security.Principal.IPrincipal接口的自定义类的实例(为了能够关联其用户ID)。

我进一步建议您使用DelegatingHandler代替操作过滤器进行令牌验证,以便在邮件生命周期中尽早设置当前主体。此外,这样您就不必使用动作过滤器属性来装饰每个动作方法/控制器。

答案 1 :(得分:0)

我强烈建议您使用OAuth。无论如何,您可以在会话中设置令牌和用户信息,并在后续调用中使用它们。即如果会话处于活动状态且用户信息存在,则使用它们,否则授权并验证用户(可能通过OAuth),如果有效,则将它们存储在会话中以便在后续调用中使用。