Web API +身份+ JWT +外部OIDC提供程序

时间:2018-11-23 13:44:24

标签: asp.net asp.net-web-api identity

由于某些要求和限制,将SPA Web应用程序(Angular)和ASP Core Web API从Auth0身份验证提供程序迁移到Identity框架。

直到现在,一切都由auth0处理,而我并未对身份验证的整个过程进行过多考虑。我只需要将用户重定向到auth0托管的登录页面即可处理所有内容,并使用访问令牌进行回调,然后将其用于对API的调用,而API只会验证JWT。

现在我需要手动完成所有操作,我有些困惑。我希望有多个身份验证选项:电子邮件/密码或OIDC身份验证提供程序,例如Google / Github。

我可以从这些OIDC提供者那里获得访问令牌,没有太大问题。但是,我该如何精确地使用它,或者更确切地说,如何配置Identity框架来处理其余的内容而又不做大量的手工工作呢?所有用户在Identity Framework用户类中都有很多其他数据,我不确定如何将其连接到OIDC令牌。

很抱歉,我提出了一个抽象的问题,我想我遗漏了一些小细节,但此刻我真的很困惑。

1 个答案:

答案 0 :(得分:1)

其中很多已经存在,因此要测试OIDC令牌,您只需要使用的API接受它们即可。

为此,您需要进行一些配置,可能与Auth0相同。由于这里依赖外部提供程序,因此我将发布一个链接:

MSDN Google Auth


要接受它们,您需要执行以下步骤:

  • 向外部提供商注册您的API
  • 使用提供程序相关的说明在您的API中进行设置。

提供程序是您所提供的提供程序的补充,并且Identity引用为ExternalProviders


通常,这很容易。可能遗漏了一些东西,因为我不知道您的确切用例。

因此,您使用的是身份提供程序,以前是Auth0,现在是另一个(或自定义)身份提供程序。

为简单起见,请简要回顾一下您的用例:

  • 您信任身份提供者,因此该提供者签名的每个令牌都是有效的。
  • 您的身份提供商(和外部提供商,例如Facebook,Google等)负责其自己的用户管理。
  • 您自己的身份提供商需要处理针对公司UserStore测试的特定身份验证方法。这些可能需要使用AD,身份用户名/密码或类似的东西进行管理。
  • 您的身份提供者通过JWT提供身份验证
  • 您还希望使用外部身份提供商,例如Facebook等。

因此,对于设置,您必须执行以下操作:

  • 实施(或重用,或使用ActiveDirectory或任何其他)用户管理工具(如果您需要对它们执行某种管理)。这意味着密码恢复以及所有这些东西,很多标准库都提供了这些东西(我认为它在Identity中是开箱即用的)
  • 在整个系统中定义客户,范围和声明。可能需要付出一些努力。
  • 确保在整个系统中JWT被接受为身份验证(已经存在),并且在为正确的客户端调用时分配了正确的声明。
  • 向外部提供商注册API
  • 设置您的API以接受外部JWT令牌(需要使用机密和API密钥进行一些设置)

Identity框架中已有很多这样的功能。 here上有一篇文章。

如果您愿意做一个很好的练习(和大量的工作),则也可以尝试使用IdentityServer4

完全定制化的东西。