.NET Core 使用 MongoDB 配置 OpenIddict



对于我的REST API,我想使用OpenIddict身份验证方案。作为数据库,我正在使用MongoDb。我已经安装了所有必要的依赖项。所有依赖项都具有最新版本。

在我的创业公司中.cs我现在想注册OpenIddict。第一步是这样(就像在文档中一样)

services.AddDbContext<UserDbContext>(options =>
{
options.UseOpenIddict<ObjectId>();
});

就在options.UseOpenIddict<ObjectId>();我收到以下错误:

'DbContextOptionsBuilder' does not contain a definition for 'UseOpenIddict' and no accessible extension method 'UseOpenIddict' accepting a first argument of type 'DbContextOptionsBuilder' could be found(are you missing a using directive or an assembly reference?)

这是CS1061错误。

我正在使用所有指令。我用谷歌搜索了很多。我唯一发现的是您需要安装所需的软件包,但我安装了它们。(在我下面的教程的解决方案文件中是完全相同的)

有谁知道如何解决这个问题?

问题在于覆盖UseOpenIddict方法的包。我已经卸载了该软件包并重写了一些代码,因为该软件包不是必需的。这是不兼容的包。

更新

谢谢凯文·查莱特的评论。

我将身份配置重写为

services.AddIdentityMongoDbProvider<UserEntity, UserRoleEntity>(mongo =>
{
mongo.ConnectionString = _databaseUri;
});

这现在对我来说非常有效。

更新 2

我用谷歌搜索了一些,但我还没有找到任何关于如何正确实现OpenIddict和MongoDB的解决方案。对于刚刚开始以下工作的人来说,以下内容可能会有所帮助。我的 OpenIddict/身份验证/授权在以下配置下运行良好:

启动.cs

配置服务:

services.AddIdentityMongoDbProvider<UserEntity, UserRoleEntity>(mongo = >{
mongo.ConnectionString = _databaseUri;
});
services.Configure<IdentityOptions>(options = >{
options.ClaimsIdentity.UserNameClaimType = OpenIdConnectConstants.Claims.Name;
options.ClaimsIdentity.UserIdClaimType = OpenIdConnectConstants.Claims.Subject;
options.ClaimsIdentity.RoleClaimType = OpenIdConnectConstants.Claims.Role;
});
services.AddAuthentication(options = >{
options.DefaultScheme = OpenIddictValidationDefaults.AuthenticationScheme;
});
services
.AddOpenIddict()
.AddCore(options = >{
options.UseMongoDb()
.UseDatabase(new MongoClient(_databaseUri)
.GetDatabase(_database));
}).AddServer(options = >{
options.SetAccessTokenLifetime(TimeSpan.FromDays(5));

options.UseMvc();

options.EnableTokenEndpoint("/api/token");

options.EnableUserinfoEndpoint("/api/userinfo");

options.AllowPasswordFlow()
.AllowRefreshTokenFlow();

options.AcceptAnonymousClients();
}).AddValidation();
services.AddAuthorization(options = >{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(OpenIddictValidationDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.Build();
});

配置:

app.UseAuthentication();
app.UseCors("AllowBrowserApp");
app.UseRouting();
app.UseAuthorization();

注意:注册身份验证和授权的位置很重要。身份验证在app.UseRouting()之前,授权在之后。否则它将无法正常工作。如果你使用Visual Studio,它会显示给你。

用户实体.cs

public class UserEntity : MongoUser
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}

如果需要,可以添加更多属性。

用户角色实体.cs

public class UserRoleEntity : MongoRole
{
public UserRoleEntity() : base() { }
public UserRoleEntity(string roleName) : base(roleName) { }
}

最新更新