Web API 2:使用浏览器中生成的第三方访问令牌进行身份验证和授权

时间:2015-02-23 15:27:49

标签: asp.net-web-api2 owin access-token jwt

我正在努力了解如何在Web API 2的OWIN管道中实现以下功能。

我正在构建一个允许用户使用Facebook,Twitter,LinkedIn等多个第三方身份提供商登录的应用程序。但是,我希望执行身份验证步骤完全是客户端< / strong>即可。例如,Facebook为开发人员提供了一个标记和JavaScript的片段,在浏览器中执行身份验证,从而产生了一个Facebook访问令牌 - 所有这些都没有调用我的API。

Visual Studio 2013附带的Web API模板似乎都假设API本身负责身份验证流程。我已经成功地使用了这种身份验证方式,但在我看来,执行此工作并不是API的责任。

以下是我一直试图实施的方法(到目前为止未成功):

  1. 提供/authenticate/facebook等接受相应访问令牌的端点,并返回带有&#34;解码的JWT&#34;声明访问令牌是否有效。无论第三方身份提供商如何,此JWT都会有类似的声明。对于Facebook,我认为这涉及到对Graph API的/me端点的调用。
  2. 将JWT存储在浏览器的localStorage中以进行后续API调用
  3. 在每个API调用的Authorize标头中发送JWT
  4. 尽可能避免使用cookies
  5. 我的问题:

    1. 这是处理第三方授权的合适方式吗?
    2. JWT的过期是否与第三方访问令牌相匹配?我认为是的,但我想知道这里有任何警告。
    3. 我在何处以及如何存储第三方访问令牌以用于后续API调用?我是否将它们包含在JWT中?
    4. 我是否可以使用开箱即用的模板,或者是以这种方式实现身份验证和授权的在线资源?我不明白如何使用Web API的许多类和功能来实现这一点。

1 个答案:

答案 0 :(得分:0)

我现在已经知道了这一点。我相信经过大量研究后,我的架构选择是正确的,特别是所谓的“断言流程”。我正在使用Thinktecture的Identity Server 3项目充当我的STS。我正在使用ICustomGrantValidator的自定义实现来执行Facebook访问令牌的验证并转换为声明。