Web Api OWIN - 如何在每个请求上验证令牌

我有两个应用程序

  1. 基于 ASP.NET MVC 的客户端应用程序构建

  2. 基于 Web API + OWIN 的身份验证服务器

已计划身份验证如下

  1. 对于用户登录,客户端应用程序将使用登录凭据向身份验证服务器发出请求。

  2. 身份验证服务器将生成一个令牌并将其发送回客户端应用程序。

  3. 客户端应用程序将该令牌存储在本地存储中。

  4. 对于每个后续请求,客户端应用程序将附加令牌保存在请求标头中的本地存储中。

现在,在 CLEINT 应用程序的服务器端,我需要验证每个请求附带的令牌没有被调和。

  1. 请建议我如何在每个请求中验证令牌,因为我不知道 OWIN 用于生成令牌的密钥。

  2. 在客户端应用程序上编写代码来验证令牌是正确的,还是应该在身份验证服务器上。

  3. 我计划将所有用户管理代码(例如注册用户、更改密码)转移到身份验证服务器,以便我们可以将其重新用于不同的客户端应用程序 - 这是正确的设计实践吗?

到目前为止,我已经编写了下面的代码来创建一个 POC。


慕丝7291255
浏览 140回答 3
3回答

一只名叫tom的猫

请建议我如何在每个请求中验证令牌,因为我不知道 OWIN 用于生成令牌的密钥。您当前的设置(如果您已将其添加app.UseOAuthBearerAuthentication()到 owin 管道)将从为您传递的每个请求中传递的不记名令牌对用户进行身份验证。然后可以通过 找到当前用户HttpContext.Current.User。Authorize然后使用该属性决定在某些端点上授权哪些用户。这是一个允许具有“user”角色的用户访问的示例[Authorize(Roles="user")]public class ValuesController : ApiController{}在客户端应用程序上编写代码来验证令牌是正确的,还是应该在身份验证服务器上。不,您不会在客户端验证令牌,如果您的用户凭据错误,您根本不会获得令牌。这就是你需要知道的全部。 而且,为什么要在客户端验证令牌?我计划将所有用户管理代码(例如注册用户、更改密码)转移到身份验证服务器,以便我们可以将其重新用于不同的客户端应用程序 - 这是正确的设计实践吗?重用令牌提供程序很常见。为什么要为每个应用程序发明轮子?构建一个伟大的,或使用第三方,并在您的应用程序中重用它。
打开App,查看更多内容
随时随地看视频慕课网APP