在为外部访问实现 API 的情况下对 ASP.NET Core Identity 和 IdentityServer 4 感到困惑

Posted

技术标签:

【中文标题】在为外部访问实现 API 的情况下对 ASP.NET Core Identity 和 IdentityServer 4 感到困惑【英文标题】:Confused about ASP.NET Core Identity and IdentityServer 4 in case of implementing an API for external access 【发布时间】:2021-01-27 10:37:59 【问题描述】:

我有一个使用 ASP.NET 标识的 ASP.NET Core 3.1.8 Web 应用程序。 现在我添加了一些外部可调用的 REST API。

我被困在如何将基于令牌(?)的身份验证添加到我的 API 中。 似乎 ASP.NET Identity 不支持 API 身份验证。在我使用的旧 .NET Framework Web 应用程序中

app.UseOAuthBearerTokens(OAuthOptions);

所以我有一个令牌端点,外部客户端可以在其中请求一个有效的令牌。

现在我读到要进行 API 身份验证,我应该使用 AD 或 AD B2C 或 IdentityServer 4。我可以使用 IdentityServer 4 选项,但有些不清楚

IdentityServer 将完全取代我的 ASP.NET Identity?我仍然想使用登录 UI 以及我现有的交互式登录逻辑和 UI。 我已经阅读了有关将 ASP Identity 插入 IdentityServer 4 的信息。那么我是否必须将现有的 ASP Identity 与 IdentityServer 4 集成? 是否可以在托管 UI 和 API 的同一个 Web 应用中托管 IdentityServer 4? 我尝试阅读 3.1.8 和 5.0.0-rc.1 的 ASP.NET Core 存储库的源代码,以获得一些方向。我不想在下一个 .NET 5 版本中被认为是次优的某个方向。我知道有另一种完整的方法可以解决这个问题:AD 或 AD B2C,我也有一个解决方案模板。作为替代方案,我也希望有一个“自包含”的解决方案,所以这就是我投资 ASP Identity 的原因。在这个轨道(自包含)中实现外部 API 身份验证的正确未来方向是什么?

【问题讨论】:

我的回答对您有帮助吗?或者你想让我在我的答案中添加一些东西吗?否则,如果您愿意,请随时接受我的回答。 【参考方案1】:

为了保护 API 本身,您通常使用following:

services.AddAuthentication("Bearer")
    .AddJwtBearer("Bearer", options =>
    
        options.Authority = "https://localhost:5001";

        options.TokenValidationParameters = new TokenValidationParameters
        
            ValidateAudience = false
        ;
    );

我建议如果你使用 IdentityServer,你应该把它放在自己的服务上,否则真的很难弄清楚发生了什么以及谁在做什么。

IdentityServer 不处理用户,所以需要自己实现用户数据库(注册/忘记密码...)。您可以为此使用 ASP.NET Identity。

IdentityServer 将完全取代我的 ASP.NET Identity?

我会说这取决于您的需求,在某些情况下 IdentityServer 会替换 ASP.NET Identity,而在某些情况下则不会。如果您只需要保护一个服务,那么 IdentityServer 可能有点过头了,因为要学习的东西很多。

【讨论】:

以上是关于在为外部访问实现 API 的情况下对 ASP.NET Core Identity 和 IdentityServer 4 感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

在没有浏览器的情况下对WSO2 Identity Server进行身份验证,并获取SAML2断言消息

在禁用调试模式的情况下对我的 Symfony 5 应用程序的 API 调用返回 CORS 错误

在 Android API 29 中访问外部存储

在库的情况下对函数的未定义引用

在不使用 PAT 的情况下验证 Azure Devops Api 调用?

如何在无人情况下对另一台电脑进行远程操作?