项目

OpenIddict 配置指南

本文档介绍如何在 AuthServer 项目中配置 OpenIddict

AuthServer 项目针对 开发生产 环境提供了不同的配置方案。

如果您的解决方案中不包含名为 .AuthServer 的项目,则意味着您可能拥有另一个依赖于 AbpAccountPublicWebOpenIddictModule 的项目。项目名称可能是 MyProjectMyProject.WebMyProject.HttpApi.Host 。在这些情况下,它们都属于 认证服务器 项目。

public override void PreConfigureServices(ServiceConfigurationContext context)
{
    var hostingEnvironment = context.Services.GetHostingEnvironment();

    if (!hostingEnvironment.IsDevelopment())
    {
       PreConfigure<AbpOpenIddictAspNetCoreOptions>(options =>
       {
          options.AddDevelopmentEncryptionAndSigningCertificate = false;
       });

       PreConfigure<OpenIddictServerBuilder>(serverBuilder =>
       {
          serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000");
       });
    }
}

开发环境

在开发环境中,默认启用 AddDevelopmentEncryptionAndSigningCertificate 功能。它会注册(并在必要时生成)用户特定的开发加密/开发签名证书。此证书用于令牌的签名和加密,且仅适用于开发环境

AddDevelopmentEncryptionAndSigningCertificate 不能在部署于IIS或Azure应用服务的应用程序中使用:尝试在IIS或Azure应用服务上使用会导致运行时抛出异常(除非应用程序池配置为 加载用户配置文件)。

为避免这种情况,请考虑创建自签名证书并将其存储在主机的 X.509 证书存储中。这是我们在生产环境中采用的实现方式。

生产环境

在生产环境中禁用 AddDevelopmentEncryptionAndSigningCertificate 功能。证书的签名和加密使用生产环境中的 openiddict.pfx 文件完成。

您可以使用 dotnet dev-certs https -v -ep openiddict.pfx -p 00000000-0000-0000-0000-000000000000 命令生成 openiddict.pfx 证书。

openiddict.pfx 仅为文件名示例,您可以为pfx文件使用任意文件名。

00000000-0000-0000-0000-000000000000 是证书密码,您可以将其更改为任意所需密码。

同时,请记得将 openiddict.pfx 复制到 AuthServer 网站的 内容根目录

建议使用两个RSA证书,且与HTTPS使用的证书区分开:一个用于加密,一个用于签名。

如果在IIS上部署时遇到文件未找到错误(即使文件确实存在),建议将应用程序池的高级设置中的加载用户配置文件设为True来解决此问题。

对于IIS部署,可以在 AddProductionEncryptionAndSigningCertificate 方法中设置 X509KeyStorageFlags.MachineKeySetX509KeyStorageFlags.EphemeralKeySet 标志。例如:

serverBuilder.AddProductionEncryptionAndSigningCertificate(
   "openiddict.pfx",
   "your-password",
   X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet);

更多信息请参阅:https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html#registering-a-certificate-recommended-for-production-ready-scenarios

在本文档中