gpt4 book ai didi

asp.net-web-api - 带有 OWIN OAuth Bearer token 的 Web Api 2

转载 作者:行者123 更新时间:2023-12-04 15:22:23 24 4
gpt4 key购买 nike

我正在 Visual Studio 2013 中构建 Web api,并希望使用 OWIN 中间件和不记名 token 进行身份验证。但是,我已经有一个数据库,并且不想使用 Microsoft 的新身份框架作为它自动生成的大多数表和列,我根本不需要。

谁能指出我如何应用这种类型的身份验证的正确方向没有 必须使用 Microsoft Identity 框架?

最佳答案

我的建议是使用框架,但扩展它以使用您的对象和基础设施。我目前正在这样做并提出了这个问题。到目前为止,这是我解决它的方法:

第 1 步:您自己的 CustomUserObject

编写/使用您自己的“ApplicationUser”对象。在模板项目中,您要修改“IdentityModels”文件。它在那里定义了 ApplicationUser 对象。假设您已经拥有现有应用程序的所有属性,则需要添加 GenerateUserIdentityAsync() 方法,但将参数类型更改为 UserManager 管理器)。更改后,您的方法签名如下所示:

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<CustomUserObject> manager)

第 2 步:定义您自己的 IUserStore<> 实现

添加一个实现 IUserStore 的新类 CustomUserStore,如下所示:
public class CustomUserStore : IUserStore<CustomUserObject>
{
private readonly IUserManagerService _userManagerService;
public CustomUserStore(IUserManagerService userManagerService)
{
_userManagerService = userManagerService
}

//implementation code for all of the IUserStore methods here using
//userManagerService or your existing services/classes
}

我正在使用 Unity 注入(inject)上面的 IUserManagementService 的实现。

我使用了 Microsoft Identity 框架附带的综合 UserManager 类,但扩展了框架以使用我的 API 进行身份验证和授权。您可以编写自己的 UserManager,但我发现它非常乏味,而且 UserManager 没有理由适用于大多数保护应用程序的情况。

第 3 步:IdentityConfig.cs 文件中的更改

更改类定义以使 ApplicationUserManager 类继承自 UserManager

您还需要在此类的构造函数中执行相同的操作;即有 IUserStore。修改 Create 静态方法的第一行以使用新的存储和一个包装类,该类提供了一种“DbContext”的方式,如下所示:
    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
{
var manager = new ApplicationUserManager(new ApplicationUserStore(context.Get<UserManagementServiceWrapper>()));
//modify the relevant lines after this to suit your needs
...
}

我的 UserManagementServiceWrapper 看起来像这样(请注意,我不太高兴它继承自一个具体的 UserManagementService 类,该类提供连接到提供用户数据的服务的方法,我仍在构建它):
public class UserManagementServiceWrapper : UserManagementService, IDisposable
{
public void Dispose()
{
throw new NotImplementedException();
}
}

第 4 步:更改 ApplicationDbContext 类以返回 UserManagementServiceWrapper 实例
public class ApplicationDbContext : UserManagementServiceWrapper
{
public static UserManagementServiceWrapper Create()
{
return new UserManagementServiceWrapper();
}
}

差不多就是这样。您仍然需要为 CustomUserStore 对象编写实现,但一切都应该工作。

请注意,这不是样板代码,也没有“准备好进行代码审查”,正如我所说,我仍在深入研究并构建它以使用自定义存储、数据访问对象、服务等。我想你会从我花了几个小时才弄清楚的一些事情开始。当我有一个好的解决方案时,我会写博客。

希望这可以帮助。

关于asp.net-web-api - 带有 OWIN OAuth Bearer token 的 Web Api 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25266167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com