【ids4】三天解决一个Bug,心累啊,IdentityServer4部署到IIS,跨域问题?

起因

最近做了一个小项目,公司的信息管理系统,用了一个刚学习的模式来做,IdentityServer4+API+Blazor

开发调试过程中很顺利,三天搞定了,但是在部署过程中,却遇到了很多问题,又弄了大概三天,血一样的教训,记录一下

问题

网站部署的环境搭建就不详细说了

在网站登录时,报错No ‘Access-Control-Allow-Origin’ header

Access to XMLHttpRequest at ‘http://192.168.20.6:5601/.well-known/openid-configuration‘ from origin ‘http://192.168.20.6:5603‘ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

报了一个跨域问题

跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。

后面我就按照网上的说法,写了各种跨域的设置,但是还是报错

突破

由于是一个小项目,就没有写日志记录,后面迫不得已还是加一个日志记录,再部署到IIS中

于是终于在日志中发现了一个报错:找不到对象(在一堆英文中发现的)

首先是报Host terminated unexpectedly.(主机意外终止),下面才报找不到对象

仔细研究日志,发现是中Startup的 builder.AddDeveloperSigningCredential();中报错

Host terminated unexpectedly.
Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: 找不到对象。
at System.Security.Cryptography.CngKeyLite.GenerateNewExportableKey(String algorithm, Int32 keySize)
at System.Security.Cryptography.RSAImplementation.RSACng.GetDuplicatedKeyHandle()
at System.Security.Cryptography.RSAImplementation.RSACng.ExportKeyBlob(Boolean includePrivateParameters)
at System.Security.Cryptography.RSAImplementation.RSACng.ExportParameters(Boolean includePrivateParameters)
at Microsoft.IdentityModel.Tokens.JsonWebKeyConverter.ConvertFromRSASecurityKey(RsaSecurityKey key)
at Microsoft.Extensions.DependencyInjection.IdentityServerBuilderExtensionsCrypto.AddDeveloperSigningCredential(IIdentityServerBuilder builder, Boolean persistKey, String filename, RsaSigningAlgorithm signingAlgorithm)
at Dartmon.MIS.Ids.Startup.ConfigureServices(IServiceCollection services) in E:\xxx\Startup.cs:line 86

AddDeveloperSigningCredential这个方法是设置临时的签名凭证,在项目首次启动时,会自动创建一个开发人员签名密钥,文件为tempkey.jwk,如果文件不存在,则会重新创建

解决

于是,我尝试着把tempkey.jwk文件放到服务器上,放到部署目录,重新启动网站

于是….终于可以了

太激动了…弄了三天…就因为缺失一个文件

三天的部署,也不完全是缺失文件的问题,也有IIS环境的问题,Blazor部署的问题,后面计划写篇关于Blazor部署问题的文章

最终解决方案

最后说下解决方案,在部署的时候不能总靠复制tempkey.jwk文件,万一哪天忘了,就不得了了

看看这文件的属性

复制到输出目录,原来的设置是不复制,改为始终复制或如果较新则复制即可,这样每次发布时,文件就会自动复制到发布文件夹

完成WC…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享