【问题标题】:Web API + Identity + JWT + External OIDC providersWeb API + 身份 + JWT + 外部 OIDC 提供商
【发布时间】:2019-04-26 03:14:18
【问题描述】:

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

到目前为止,一切都由 auth0 处理,我没有过多考虑身份验证的整个过程。我只需将用户重定向到 auth0 托管的登录页面,它会处理所有事情,使用访问令牌进行回调,然后我将使用它来调用 API,其中 API 只会验证 JWT。

现在我需要手动完成这一切,我有点困惑。我想要多个身份验证选项:电子邮件/密码或 OIDC 身份验证提供商,如 Google/Github。

我可以毫无问题地从这些 OIDC 提供商处获取访问令牌。但是我该怎么做呢,或者更准确地说,我如何配置身份框架来处理其余部分,而不需要做很多手动工作?所有用户在身份框架用户类中都有相当多的额外数据,我不完全确定如何将其连接到 OIDC 令牌。

对不起,有点抽象的问题,我想我遗漏了一些小细节,但目前我真的很困惑。

【问题讨论】:

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


    【解决方案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实现完全定制的东西

    【讨论】:

      猜你喜欢
      • 2020-08-14
      • 2019-02-19
      • 2021-09-12
      • 2022-06-16
      • 2022-09-23
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 2020-09-30
      相关资源
      最近更新 更多