Проблема была в пакете, который перекрыл метод UseOpenIddict
. Я удалил пакет и переписал код, так как в пакете не было необходимости. Этот является несовместимым пакетом.
Обновление
Спасибо Kévin Chalet за этот комментарий .
Я переписал свою конфигурацию удостоверения на
services.AddIdentityMongoDbProvider<UserEntity, UserRoleEntity>(mongo =>
{
mongo.ConnectionString = _databaseUri;
});
Теперь это отлично работает для меня.
Обновление 2
Я погуглил еще, и у меня нет не нашел решений, как правильно реализовать OpenIddict и MongoDb. Для тех, кто только начинает, может помочь следующее. Мой OpenIddict / аутентификация / авторизация работает нормально со следующей конфигурацией:
Startup.cs
ConfigureServices:
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, он покажет вам.
UserEntity.cs
public class UserEntity : MongoUser
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
Вы можете добавить дополнительные свойства, если хотите.
UserRoleEntity.cs
public class UserRoleEntity : MongoRole
{
public UserRoleEntity() : base() { }
public UserRoleEntity(string roleName) : base(roleName) { }
}