我正在使用backbone.js和web api构建应用程序。 JS客户端将发送ajax请求来访问api。构建API非常简单,但我想实现API的身份验证和授权。
我计划在成功验证后返回令牌,并将此令牌用于进一步的请求。此令牌将在HTTP Authorization标头中传递。 我的要求如下 1)验证每个请求上的令牌并获取用户ID。 2)使用获取的用户ID进行进一步操作。
可以使用自定义操作过滤器处理第一位,其中可以针对数据库验证永久令牌。 但我无法找到任何样本或示例做第二位。我希望从传递的令牌中获取用户ID并将其进一步传递以供以后处理。 这有什么办法吗?
等待建议或想法。任何代码示例都会有所帮助。提前致谢。
答案 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),如果有效,则将它们存储在会话中以便在后续调用中使用。