【问题标题】:Can I use Microsoft.AspNetCore.Identity Nuget in my Web API solution?我可以在我的 Web API 解决方案中使用 Microsoft.AspNetCore.Identity Nuget 吗?
【发布时间】:2021-07-14 20:16:00
【问题描述】:

我目前有一个 Blazor WASM 项目,该项目从 AspNetCore 5 应用服务获取其 ID/访问令牌,其中 IdentityServer4 IDP 托管在 Azure 中,利用 Microsoft Identity 作为用户存储。 IDP 中的 MS 身份组件使用的实际数据库托管在 Azure SQL 中。我还有一个单独的 AspNetCore 5 Web API 解决方案,该解决方案针对 IDP 进行了身份验证。

目前,新用户需要使用 IDP 中的 MS 身份注册 UI 进行注册。

现在我有一个请求,允许站点管理员为其组织创建初始用户(可能是批量或批量),而不是让用户自己直接访问 IDP 中基于 MS 身份的注册链接。

所以我想我基本上可以在我的 API 中创建一个用户控制器,该控制器通过 EntityFramework 连接到我的 IDP 使用的 Azure SQL 数据库。我希望我能以某种方式利用 Microsoft.AspNetCore.Identity 包来利用我的 AspNetCore 5 API 中用于 UserManager、RoleManager、IdentityUser 等的 Identity 项目的类和方法。但是,我看不到如何在Startup.cs --> ConfigureServices 以便我可以通过 DI 在我的 API 服务中实际访问 UserManager 和 RoleManager 工具(例如)。

我不希望在此处实际验证登录或生成我自己的身份/访问令牌。我只想创建/编辑用户,可能是批量或批量。

我不认为使用...

        services.AddIdentity<User, IdentityRole>()
            .AddRoles<IdentityRole>()
            .AddRoleManager<RoleManager<IdentityRole>>()
            .AddEntityFrameworkStores<UsersDbContext>(); services.AddIdentity

在我的 API 的 startup.cs 中,这似乎会干扰...

        services.AddAuthentication("Bearer")
            .AddJwtBearer("Bearer", options =>
            {
                ...
                ...
            });  

我用于验证访问令牌。

我只是想我可以使用 Microsoft 的 AspNetCore Identity 包从我自己的 API 中访问 CRUD 用户帐户所需的用户和角色工具,也许是批量访问,而不是在我的 API 中扮演我自己的类和方法。

有谁知道这是否可行,如果可以,如何在 DI 中正确注册 Microsoft AspNetCore Identity 服务?

【问题讨论】:

  • 嗨 @whiskytangofoxtrot,您可以将 Identity 与 jwt 令牌身份验证一起使用。

标签: asp.net-core asp.net-identity identityserver4


【解决方案1】:

我的建议是仅使用 AddJwtBearer() 保护您的 API,并将身份信息放在不同的客户端服务/应用程序中。因此,API 所要做的就是接受带有访问令牌的请求。这将使您的解决方案更容易推理和理解。

保持 API 简单纯净!

【讨论】:

  • 感谢@ToreNestenius,但我并不想使用 MS Identity 和 Jwt 来保护 API。我正在尝试访问 MS 身份库以利用用户管理代码来创建、编辑和删除用户和角色。例如 UserManager 和 RoleManager 组件。我可以将用户创建/更新/删除和批量/批量添加到我的 IDP 而不是我的 API,但我觉得在我的 API 中包含这些组件更舒服。
  • 我仍然会将它放在它自己的服务中,以管理用户/角色并让 API 成为一个 API.. 会让您的生活更轻松! -> 考虑单一责任!
  • 我理解你的想法,@ToreNestenius,只是 CRUD 用户的能力是 API 的要求之一,并且启动一个新的 Azure AppService 来托管用户 CRUD 组件是'没有得到很多支持。同样,我没有在这个 API 中做身份提供者的职责,只是用户 CRUD。我有一个单独的 IDP 服务。
【解决方案2】:

事实证明,有一个名为 AddIdentityCore 的 services.AddIdentity 版本,它提供了没有 ID/访问令牌元素的用户管理实用程序。

将以下代码添加到 Startup.cs --> 我的 API 中的 ConfigureServices 成功了。

services.AddIdentityCore<User>()
    .AddRoles<IdentityRole>()
    .AddRoleManager<RoleManager<IdentityRole>>()
    .AddEntityFrameworkStores<UsersDbContext>()
    .AddDefaultTokenProviders();

.AddDefaultTokenProviders() 添加了在创建新帐户时发送确认电子邮件时生成回调链接中使用的代码的功能。

使用 Startup 中的此代码,我能够根据需要将 Usermanager 和 RoleManager 注入我的服务,并且仍然正确授权 OAuth2 令牌以保护对 API 本身的访问。

【讨论】:

    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多