1

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

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

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

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

4

2 回答 2

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)。

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

于 2013-10-28T06:44:13.733 回答
0

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

于 2013-10-26T22:53:27.950 回答