小编mon*_*nty的帖子

.NET Core X509Certificate2的用法(在Windows / IIS,Docker,Linux下)

我确实在尝试长时间使用.NET Core API中的证书。

基本上,我需要在IIS和docker上运行的.NET Core Web API中使用它们。

我需要使用的证书用于:

Microsoft.AspNetCore.DataProtection

public void ConfigureServices(IServiceCollection services)
{
  services.AddDataProtection()
    .PersistKeysToFileSystem(new DirectoryInfo(dataProtectionKeystorePath))
    .ProtectKeysWithCertificate
    (
      new X509Certificate2(dataProtectionCertificatePath, dataProtectionCertificateSecret)
    );
}
Run Code Online (Sandbox Code Playgroud)

Kestrel选项以设置SSL证书

public static IWebHost BuildWebHost(string[] args) =>
  WebHost.CreateDefaultBuilder(args)
    .UseKestrel
    (
      options =>
        {
          options.Listen(address, port, listenOptions =>
            {
              listenOptions.UseHttps(new X509Certificate2(sslCertificatePath, sslCertifciateSecret));
            }
          );
        }
      )
      // other setup
     ;
Run Code Online (Sandbox Code Playgroud)

IdentityServer4.SigningCredentials

注意:此代码可从VS2017开始在开发机上运行,​​但会在Windows 2008 R2 IIS测试服务器上引发这些异常。

services.AddIdentityServer()
  .AddSigningCredential
  (
    new X509Certificate2(tokenCertificatePath, tokenCertificatePassphrase)
  )
  // other setup
  ;
Run Code Online (Sandbox Code Playgroud)

这三个都意味着放置一个证书文件,使用构造函数加载它,传递密码,然后开始。

sarkasm>快乐,这很容易。<萨卡姆

因此,我创建了一个包含证书的certs子目录。添加了机密设置。验证所有值均已按预期加载/创建。验证文件位于预期位置并因此存在。简而言之:

string dataProtectionKeystorePath = System.Path.Combine(Environment.ContentRootPath, "keystore");
string dataProtectionCertificatePath = …
Run Code Online (Sandbox Code Playgroud)

c# x509certificate2 identityserver4 asp.net-core-2.1 .net-core-2.1

7
推荐指数
1
解决办法
4302
查看次数

.NET Core / Kestrel应用程序无故关闭

到目前为止,在IIS 7.5下托管.net核心(2.2)API的现有设置运行顺利且效果很好。

突然我发现日志保存了该消息,Application is shutting down...而没有任何错误或其他原因的迹象。当突然生成比以前更多的日志文件时,我开始意识到这一点。

我不确定,但是当我从.NET Core 2.1迁移到2.2时可能已经开始了。

有人知道这是功能还是错误,有害或故意?

iis iis-7.5 .net-core kestrel-http-server .net-core-2.2

7
推荐指数
1
解决办法
765
查看次数

PostgreSQL 的实体框架核心代码第一个默认值

到目前为止,我阅读了谷歌提出的文档、教程和其他 SO 问题,但似乎我错过了一些东西并且我不明白(工作)。

我尝试为 .NET Core 2.1 web api(微服务)实现一个非常小的 PostgreSQL 数据库。我习惯了数据库优先的方法,但对于这项服务,我决定尝试代码优先的方法。

我还决定使用 ModelBuilder 的 fluent api 来保持类与属性的清洁,并在 DbContext.OnModelCreating 方法中定义大部分结构。安迪也许有一次找到了一种解决方案,如何从 Postgres 特定元素中保持 DbContext 干净,并将它们移动到迁移中......

我的问题是需求定义了很多默认值,我无法让它们正常工作。

例如,我有一个表 Entity1,它只有 3 列:

  • int Id(自动递增 ID)
  • 布尔?IsEnabled(应该得到默认值true)
  • 约会时间?LastStatusChange(没有时区的时间戳,应在创建或更新为默认值 CURRENT_TIMESTAMP 时设置)

时间戳默认值背后的想法是让数据库成为创建时间戳的单个实例,并使用 db 默认值作为所有正在运行的实例的配置。例如。当需求更改为“默认值现在应该为 false”时,我们只需更改现有数据库中的 db 默认值并更新更新分期付款的迁移。

我的模型构建器代码目前是:

  modelBuilder.Entity<Entity1>(entity =>
  {
    entity.HasKey(e => e.Id);

    entity.Property(e => e.Id)
      .ValueGeneratedOnAdd();

    entity.Property(e => e.IsEnabled)
      .HasDefaultValue(true)
      .ValueGeneratedOnAddOrUpdate();

    entity.Property(e => e.LastStatusChange)
      .HasColumnType("timestamp without time zone")
      .HasDefaultValueSql("CURRENT_TIMESTAMP")
      .ValueGeneratedOnAddOrUpdate();
  });
Run Code Online (Sandbox Code Playgroud)

这适用于新创造的价值。

切换或重置我使用的字段时

entity.LastStatusChange = null;
Run Code Online (Sandbox Code Playgroud)

和或

entity.IsEnabled = null;
Run Code Online (Sandbox Code Playgroud)

我假设将它们设置为 null 会触发默认值的创建,但这不会影响 LastStatusChange …

postgresql npgsql entity-framework-core .net-core .net-core-2.1

6
推荐指数
2
解决办法
9765
查看次数

p:消息更改消息文本

我创建了一个映射到MyBean.beansField的表单.我使用了javax.validation.NotNull anotation来确保它必须输入.到目前为止一切正常但错误消息如下所示:

beansField:不能为null.

无论我到目前为止尝试了什么,我都无法删除消息前面的"beansField:".

任何人都可以告诉我这个前缀来自哪里以及如何摆脱它?

jsf primefaces

5
推荐指数
1
解决办法
2万
查看次数

Error Creating JWT Token using RSA Security Key with key size less than 2048

I'm facing an exception when trying to create a JWT token in C# Web API application.

Test environment

Here is the code responsible for generating RSA keys:

    public SignatureInformation CreateNewSignatureInformation(int length = 0)
    {
        try
        {
            var signatureInformation = new SignatureInformation();

            var rsaProvider = new RSACryptoServiceProvider(length);

            var publicKey = rsaProvider.ToXmlString(false);
            signatureInformation.Public = publicKey;

            var privateKey = rsaProvider.ToXmlString(true);
            signatureInformation.Private = privateKey;

            return signatureInformation;
        }
        catch (Exception)
        { …
Run Code Online (Sandbox Code Playgroud)

c# authentication rsa wif jwt

5
推荐指数
1
解决办法
2821
查看次数

OpenID 连接除用户中当前 loggend 之外的其他用户的 Userinfo 端点

以下场景:

您将敏感且受保护的用户信息(姓名、邮件地址、电话号码、地址)安全地保存在授权服务器(例如 IdentityServer4)中。

您有一个 API 从存储您自己的数据(不是敏感用户数据)的第二个数据库加载数据。该数据以某种方式链接到用户(假设我们存储文档并且文档 A 属于具有 auth-id“XYZ”的用户)。

问题:

现在,单页应用程序获取文档列表,并希望显示拥有该文档的用户的姓名和电子邮件地址。

到目前为止,我了解 OpenID Connect UserInfo 端点仅返回当前登录用户的用户信息,而不返回其他用户的用户信息。因此需要在其他地方获取其他用户的信息。

解决方案1:将用户信息复制到第二个数据库中。这会从安全的授权服务器中泄漏敏感数据,需要保持数据同步(如果在身份验证服务器上更改),这会在身份验证服务器到第二个数据库或身份验证服务器到 API 端点之间引入连接。

解决方案 2:让 AP​​I 访问 auth DB 并从那里获取数据。可能,但引入了数据库连接到授权数据库是什么(我个人认为不好)。

解决方案 3:在授权服务器上引入一个端点(如 UserInfo 端点),让单页应用程序通过身份验证 ID 请求用户信息。看起来最实用但似乎没有具体说明?

有官方指定/推荐的方法来解决这个问题吗?也许是使用 UserInfo 端点来实现我迄今为止错过的规范?

只是 my.domain.com/userinfo/XYZ 返回具有 auth-id XYZ 的用户的信息???

userinfo oauth-2.0 openid-connect identityserver4

5
推荐指数
1
解决办法
1948
查看次数

.NET Core StackExchange.Redis ConnectionMultiplexer 设置多个 Redis 服务器

我正在 .NET Core 2.2 中开发一些 Web api

这些需求使我们达到了在多个 Redis 存储中存储/缓存/集中数据的地步(为了简单起见,我们假设有 2 个 Redis 服务器)。

那将是(例如)

  1. 服务器1用于数据保护
  2. 服务器2用于一些其他数据

到目前为止,数据保护似乎有效,并且按照基本使用指南中的建议,使用连接多路复用器(预先将其添加为单例以供重用)进行配置。

StartUp.ConfigureServices的相关部分

  ConnectionMultiplexer cm = ConnectionMultiplexer.Connect("server1:6729");
  services.AddSingleton<IConnectionMultiplexer>(cm);

  services.AddDataProtection()
    .SetApplicationName("myapp")
    .PersitKeysToStackExchangeRedis(cm, "DataProtection-Keys");
Run Code Online (Sandbox Code Playgroud)

密钥按预期存储在服务器 1 上的 Redis 存储中。


现在我需要集成第二个存储。

ConnectionMultiplexer 可以用来连接两台服务器吗?

ConnectionMultiplexer cm = ConnectionMultiplexer.Connect("server1:6729;server2:6729"); //?
Run Code Online (Sandbox Code Playgroud)

如何获得指向正确(第一或第二)服务器的正确数据库?

c# redis stackexchange.redis .net-core

5
推荐指数
2
解决办法
2万
查看次数

.NET Core SSL-模板仅在浏览器中显示PR_CONNECT_RESET_ERROR(Firefox)

我仅在VS 2017模板对话框中启用了“配置HTTPS”,从而创建了.NET Core Web应用程序。

我用了

dotnet dev-certs https --trust
Run Code Online (Sandbox Code Playgroud)

并确认提示。我用MMC检查了CurrentUser / My中是否存在本地主机证书。

当我现在运行该应用程序时,Firefox仅向我显示(我不知道确切的英语翻译)

连接到https // localhost:44371时发生错误PR_CONNECT_RESET_ERROR

Chrome浏览器还会显示以下错误,

ERR_CONNECTION_RESET

我也禁用了Windows防火墙,但结果是相同的。

当我取消选中项目调试属性中的“启用SSL”时,该站点显示良好,但没有HTTPS。

任何人都知道可能出什么问题,或者在Github中我可以找到查找证书的代码吗?


更新1:

我从使用IIS Express的Visual Studio(2017)启动应用程序切换到了Kestrel,后者打开了控制台窗口并告诉我更多信息:

info: Microsoft.AspNetCore.Server.Kestrel[20]
      Connection id "0HLOLGRVN8U0U" request processing ended abnormally.
System.IO.IOException: The decryption operation failed, see inner exception. ---
> System.ComponentModel.Win32Exception: Beim Verarbeiten des Zertifikats ist ein
 unbekannter Fehler aufgetreten
   --- End of inner exception stack trace ---
   at System.Net.Security.SslStreamInternal.ReadAsyncInternal[TReadAdapter](TRea
dAdapter adapter, Memory`1 buffer)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal.AdaptedPipeline.
ReadInputAsync(Stream stream)
   at System.IO.Pipelines.PipeCompletion.ThrowLatchedException()
   at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result)
   at System.IO.Pipelines.Pipe.GetReadAsyncResult()
   at …
Run Code Online (Sandbox Code Playgroud)

c# ssl-certificate iis-express .net-core .net-core-2.2

5
推荐指数
1
解决办法
694
查看次数

嵌入式linux的理论要求

我来自使用 Java、C#、C++、Javascript 的程序员背景

我给自己买了一个树莓派(Model 1 A,没有以太网的那个)并玩了一段时间。我使用了 Raspbian 和 Arch Linux ARM(因为有人说它小巧且可定制)。不幸的是,我没有按照我想要的方式配置它们。

我正在尝试构建一个漂亮的(嵌入式)系统,其唯一目标是快速启动(启动)Raspberry Pi 并自动启动一个测试应用程序,该应用程序将使用 C#(Mono)、C++(Qt)、Java(Java 运行时)编写或 JavaScript/HTML 中的东西。

由于我无法删除所有日志消息(我删除了大部分)、tty 登录屏幕、连接到网络的尝试(尽管 Model 1 A 根本没有以太网)启动是丑陋的并且花了很长时间(在某些情况下 +1 分钟)。

似乎我必须构建一个最小的嵌入式 linux,但我缺乏嵌入式 linux 元素的理论以及它们如何组合在一起。

我的问题:在树莓派上支持 mono、qt、java 运行时的嵌入式 linux 理论上需要哪些部分?

到目前为止,我知道以下部分:

  • 硬件(树莓派型号 1 A)+ SD 卡
  • SD卡有2个分区,1个引导分区(fat32),1个数据分区(ext4)
  • 引导加载程序
  • 一个 linux 内核(可以根据 raspi 的需要进行优化)

但是呢?我的研究在“使用发行版”中迷失了我不想要的东西。内核和启动应用程序之间缺少哪些部分?

theory embedded-linux raspberry-pi

4
推荐指数
1
解决办法
803
查看次数

填充IConfiguration以进行单元测试

.NET Core配置允许许多选项来添加值(环境变量,json文件,命令行args)。

我只是想不通,找到一个如何通过代码填充它的答案。

我正在编写用于配置扩展方法的单元测试,我认为通过代码在单元测试中填充它比为每个测试加载专用的json文件容易。

我当前的代码:

  [Fact]
  public void Test_IsConfigured_Positive()
  {

    // test against this configuration
    IConfiguration config = new ConfigurationBuilder()
      // how to populate it via code
      .Build();

    // the extension method to test
    Assert.True(config.IsConfigured());

  }
Run Code Online (Sandbox Code Playgroud)

更新:

一种特殊情况是“空部分”,它在json中看起来像这样。

  {
    "MySection": {
       // the existence of the section activates something triggering IsConfigured to be true but does not overwrite any default value
     }
   }
Run Code Online (Sandbox Code Playgroud)

更新2:

就像马修(Matthew)在评论中指出的那样,在json中有一个空白部分会产生与根本没有该部分相同的结果。我列举了一个例子,是的,就是这样。我期望其他行为是错误的。

所以我该怎么办,我期望什么:

我正在为IConfiguration的2个扩展方法编写单元测试(实际上是由于某些原因,Get ... Settings方法中的值绑定不起作用(但这就是一个不同的主题)。它们看起来像这样:

  public static bool IsService1Configured(this IConfiguration configuration)
  {
    return configuration.GetSection("Service1").Exists();
  }

  public …
Run Code Online (Sandbox Code Playgroud)

xunit .net-core asp.net-core asp.net-core-2.2 .net-core-2.2

4
推荐指数
4
解决办法
1150
查看次数