dotnet 应用用 IdentityServer4 做了登陆的功能,本地运行没有问题,部署到服务器上面就出现上面的问题,打开服务器的日志记录开关,获取到下面的异常信息。原来是
通过分析日志信息,发现报错的原因是因为 IdentityServer4 的加密签名导致的。
IS4 中如果 token 的类型是 JWT,则需要使用 RS256 算法生成非对称签名,这意味着必须使用私钥来签名 JWT token,并且必须使用对应的公钥来验证 token 签名,即验证 token 是否有效。使用 RS256 可以保证 IS4 服务端是 JWT 的唯一签名者,因为 IS4 服务端是唯一拥有私钥的一方,前提是私钥不会被泄露。所以我们需要一个证书为我们提供私钥和公钥。在开发环境可以利用 IS4 的 AddDeveloperSigningCredential 方法生成 RSA 文件,RSA 文件为我们提供私钥和公钥,但是 RSA 文件不够安全,打开文件可以直接看到公钥和私钥,在生产环境我们一般会生成证书来提供私钥和公钥。使用 OpenSSL 生成证书的方式如下:
1、安装 OpenSSL 工具 ,官网下载地址:https://slproweb.com/products/Win32OpenSSL.html
2、在 CMD 中执行以下命令
openssl req -newkey rsa:2048 -nodes -keyout cas.clientservice.key -x509 -days 365 -out cas.clientservice.cer
执行上面命令之后,我们可以在 C:\WINDOWS\system32 目录下面找到 cas.clientservice.cer 和 cas.clientservice.key 两个文件
下面的命令是将生成的证书和 Key 封装成一个文件,以便 IdentityServer 可以使用它们去正确地签名 tokens,文件会生成在 CMD 执行目录下面“C:\WINDOWS\system32”
openssl pkcs12 -export -in cas.clientservice.cer -inkey cas.clientservice.key -out IS4.pfx
IS4.pfx 是证书名称,可以自己修改,中途会提示让你输入 Export Password,这个 password 在 IS4 中会用到,需要记下来。
在 Startup.cs 中配置 Ids4 服务
重新生成发布,并且把 IS4.pfx 证书拷贝到服务器上面。
再次运行,一切正常!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于