Web API + 身份 + JWT + 外部 OIDC 提供商
Web API + Identity + JWT + External OIDC providers
由于某些要求和限制,正在将 SPA 网络应用程序 (Angular) 和 ASP 核心 Web API 从 Auth0 身份验证提供程序迁移到身份框架。
直到现在一切都由 auth0 处理,我没有对整个身份验证过程给予太多考虑。我会简单地将用户重定向到 auth0 托管的登录页面,它会处理所有事情,使用访问令牌进行回调,我会用它来调用 API,其中 API 只会验证 JWT。
现在我需要手动完成这一切,我有点困惑。我想要多个身份验证选项:Email/Password 或 OIDC 身份验证提供程序,如 Google/Github.
我可以毫无问题地从这些 OIDC 提供商处获取访问令牌。但是我究竟要用它做什么,或者更准确地说,我如何配置身份框架来处理其余的事情,而不需要做大量的手动工作?所有用户在身份框架用户 类 中都有相当多的额外数据,我不确定如何将其连接到 OIDC 令牌。
抱歉问了一个有点抽象的问题,我想我遗漏了一些小细节,但此刻我真的很困惑。
其中很多已经到位,因此要测试 OIDC 令牌,您只需要它们被您的消费 API.
接受即可
为此,您需要进行一些配置,可能与您对 Auth0 所做的配置相同。由于这里依赖于外部提供者,我将 post a link:
要接受它们,您需要执行以下步骤:
- 向外部提供商注册您的API
- 使用依赖于提供商的说明在您的 API 中进行设置。
这些提供者是您已放置的提供者的补充,并被身份引用为 ExternalProviders
总的来说,这很容易。可能遗漏了一些东西,因为我不知道你的确切用例。
所以您使用的是身份提供者,以前是 Auth0,现在是另一个(或自定义)身份提供者。
为了理智,回顾一下您的用例:
- 您信任身份提供者,因此该提供者签署的每个令牌都是有效的。
- 您的身份提供者(以及外部身份提供者,例如 Facebook、Google 等)负责他们自己的用户管理。
- 您自己的身份提供者需要处理特定的身份验证方法,并针对企业
UserStore
进行了测试。这些需要管理,可能使用 AD、身份 username/password 或类似的东西。
- 您的身份提供者通过 JWT 提供身份验证
- 您还想使用外部身份提供商,如 Facebook 等
因此,对于设置,您必须执行以下操作:
- 实施(或重用,或使用 ActiveDirectory 或任何其他)用户管理工具,如果您需要对它们执行一些管理。这意味着密码恢复和所有其他东西,这在很多标准库中都可用(我认为它在 Identity 中开箱即用)
- 在整个系统中定义客户、范围和声明。可能还要努力。
- 确保 JWT 被接受为整个系统的身份验证(这已经到位)并且在为正确的客户端调用时分配正确的声明。
- 向外部提供商注册您的API
- 设置您的 API 以接受外部 JWT 令牌(需要使用秘密和 API 密钥进行一些设置)
身份框架中已经有很多这样的东西。有一篇关于它的文章 here。
如果你愿意做一个很好的练习(和大量的工作),你也可以尝试使用 IdentityServer4
实现完全定制的东西
由于某些要求和限制,正在将 SPA 网络应用程序 (Angular) 和 ASP 核心 Web API 从 Auth0 身份验证提供程序迁移到身份框架。
直到现在一切都由 auth0 处理,我没有对整个身份验证过程给予太多考虑。我会简单地将用户重定向到 auth0 托管的登录页面,它会处理所有事情,使用访问令牌进行回调,我会用它来调用 API,其中 API 只会验证 JWT。
现在我需要手动完成这一切,我有点困惑。我想要多个身份验证选项:Email/Password 或 OIDC 身份验证提供程序,如 Google/Github.
我可以毫无问题地从这些 OIDC 提供商处获取访问令牌。但是我究竟要用它做什么,或者更准确地说,我如何配置身份框架来处理其余的事情,而不需要做大量的手动工作?所有用户在身份框架用户 类 中都有相当多的额外数据,我不确定如何将其连接到 OIDC 令牌。
抱歉问了一个有点抽象的问题,我想我遗漏了一些小细节,但此刻我真的很困惑。
其中很多已经到位,因此要测试 OIDC 令牌,您只需要它们被您的消费 API.
接受即可为此,您需要进行一些配置,可能与您对 Auth0 所做的配置相同。由于这里依赖于外部提供者,我将 post a link:
要接受它们,您需要执行以下步骤:
- 向外部提供商注册您的API
- 使用依赖于提供商的说明在您的 API 中进行设置。
这些提供者是您已放置的提供者的补充,并被身份引用为 ExternalProviders
总的来说,这很容易。可能遗漏了一些东西,因为我不知道你的确切用例。
所以您使用的是身份提供者,以前是 Auth0,现在是另一个(或自定义)身份提供者。
为了理智,回顾一下您的用例:
- 您信任身份提供者,因此该提供者签署的每个令牌都是有效的。
- 您的身份提供者(以及外部身份提供者,例如 Facebook、Google 等)负责他们自己的用户管理。
- 您自己的身份提供者需要处理特定的身份验证方法,并针对企业
UserStore
进行了测试。这些需要管理,可能使用 AD、身份 username/password 或类似的东西。 - 您的身份提供者通过 JWT 提供身份验证
- 您还想使用外部身份提供商,如 Facebook 等
因此,对于设置,您必须执行以下操作:
- 实施(或重用,或使用 ActiveDirectory 或任何其他)用户管理工具,如果您需要对它们执行一些管理。这意味着密码恢复和所有其他东西,这在很多标准库中都可用(我认为它在 Identity 中开箱即用)
- 在整个系统中定义客户、范围和声明。可能还要努力。
- 确保 JWT 被接受为整个系统的身份验证(这已经到位)并且在为正确的客户端调用时分配正确的声明。
- 向外部提供商注册您的API
- 设置您的 API 以接受外部 JWT 令牌(需要使用秘密和 API 密钥进行一些设置)
身份框架中已经有很多这样的东西。有一篇关于它的文章 here。
如果你愿意做一个很好的练习(和大量的工作),你也可以尝试使用 IdentityServer4
实现完全定制的东西