在Azure App服务上部署Identity Server时遇到问题。以下是设置。
JSclient在本地托管。 Auth Server在Azure App Service上。
var certificate = SSLHelper.GetCertificateCurrentUserMyStore(signingsslthumbprint);
builder
.AddSigningCredential(certificate)
.AddSecretParser<ClientAssertionSecretParser>()
.AddSecretValidator<PrivateKeyJwtSecretValidator>()
.AddAspNetIdentity<User>()
.AddProfileService<ProfileService>();
我创建了两个证书,一个用于签名,另一个用于交换。
`New-SelfsignedCertificateEx -Subject&#34; CN = devsignature&#34; -EKU 1.3.6.1.5.5.7.3.3 -KeySpec&#34;签名&#34; -KeyUsage&#34; DigitalSignature&#34; -StoreLocation&#34; CurrentUser&#34; -SAN $ domains -SignatureAlgorithm&#34; SHA256&#34; -KeyLength 2048 -FriendlyName&#34; DevSignature&#34; -NotAfter $([System.DateTime] :: Now.AddYears(15)) - 出口
New-SelfsignedCertificateEx -Subject&#34; CN = * .mydomain.com&#34; -EKU 1.3.6.1.5.5.7.3.1 -KeySpec&#34; Exchange&#34; -KeyUsage&#34; DigitalSignature&#34; -StoreLocation&#34; CurrentUser&#34; -SAN $ domains -SignatureAlgorithm&#34; SHA256&#34; -KeyLength 2048 -FriendlyName&#34; DEVExchange&#34; -NotAfter $([System.DateTime] :: Now.AddYears(15))-Exportable`
以下是用于重新获取所有证书的应用程序服务设置。
当我在Windows机箱上部署auth服务器(不是本地机器但在另一台服务器上)时,这是有效的。但是,当我部署到IIS ...
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>d__6.MoveNext() | Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke
119 | 2017-05-14 20:32:04.4131 | RD0003FF635548 |错误| ExceptionHandlerMiddleware | AsyncTaskMethodBuilder.Start =&gt; d__8.MoveNext =&gt; ExceptionHandlerMiddleware.Invoke |发生了未处理的异常:未配置签名凭据。无法创建JWT tokenEXCEPTIONSystem.InvalidOperationException:未配置签名凭据。无法创建JWT令牌
我正在使用Dev证书(不是真正的证书)。这是为了分阶段部署。
过去两天试过这个并且无法开始工作。
编辑:这甚至没有打到api服务器。这就是当JSClient登录重定向到 - &gt; AuthServer。
有人可以帮忙吗?
谢谢,
编辑:
我得到了更多感谢@moritzg和@Austin Dimmer。现在,当我使用令牌调用webapi时,它会抛出我的IDX10803:无法从以下位置获取配置:&#39; https://myauthserver.com/.well-known/openid-configuration&#39;。
有什么想法吗?
EDIT2:
以下是来自api服务器的调试日志
643 | RD0003FF635548 | DEBUG | LoggingConnectionFilter | MoveNextRunner.InvokeMoveNext => <ReadAsync>d__16.MoveNext =>
LoggingStream.Log | ReadAsync [2266] 47 45 54 20 2F 61 70 69 2F 63 6F 6F 6D 6D 6F 6E 2F 63 61 74 61 ................ GET / api / myendpoint HTTP / 1.1 Cache-Control:无缓存连接:Keep-Alive Pragma: no-cache接受:text / plain Accept-Encoding:gzip,deflate,sdch,br Accept-Language:en-US,en; q = 0.8授权:持票人 eyJhbGciOiJSUzI1NiIsImtpZCI6IkVEQTYsdfsdfdsfsdfdsfdscHM6 ......... Cookie:ARRAffinity = e414d40c85d90229be06c3c9de2fzxczxczxc3 ....... 主持人:myapiserver Max-Forwards:10 Referer: https://myapiserver/swagger/用户代理:Mozilla / 5.0(Windows NT 10.0; Win64平台; x64)AppleWebKit / 537.36(KHTML,和Gecko一样) Chrome / 58.0.3029.110 Safari / 537.36 X-LiveUpgrade:1 X-WAWS-Unencoded-URL:/ api / myendpoint X-Original-URL:/ api / myendpoint X-ARR-LOG-ID:7c2afdfe4c-d3ea-dfer-9570-ffgfgfgfgfd DISGUISED-HOST: myapiserver X-SITE-DEPLOYMENT-ID:myapiserver WAS-DEFAULT-HOSTNAME: myapiserver.azurewebsites.net X-Forwarded-For:XXX.XXX.XXX.XXX:XXXXX, XXX.XXX.XXX.XXX:XXXXX X-ARR-SSL:2048 | 256 | C = XX,S = XXXXX,L = XXXXX, O = XXXX,OU = IT,CN = .mydoamin.com,E = xxx@xxx.com | C = XXX,S = XXXXX,L = XXXX, O = XXXXX,OU = IT,CN = .mydomain.com,E = xxx@xxx.com MS-ASPNETCORE-TOKEN: XXX-XXX-XXX-XXXX-XXXXXXXXX X-Forwarded-Proto:https
| Microsoft.AspNetCore.Server.Kestrel.Filter.Internal.LoggingStream.Log 650 | RD0003FF635548 |调试| LoggingConnectionFilter | StreamSocketOutput.ProducingComplete =&gt; LoggingStream.Write =&gt; LoggingStream.Log |写[111] 48 54 54 50 2F 31 2E 31 20 35 30 30 20 49 6E 74 65 72 6E 61 6C 20 53 65 72 76 65 72 20 45 72 72 6F 72 0D 0A 44 61 74 65 3A 20 57 65 64 2C 20 31 37 20 4D 61 ...... HTTP / 1.1 500 内部服务器错误日期:XXXXXXXXXXXXXXXXXXXXXX内容长度:0 服务器:Kestrel
| Microsoft.AspNetCore.Server.Kestrel.Filter.Internal.LoggingStream.Log 651 | RD0003FF635548 |调试|红隼| Frame.WriteSuffix =&gt; Connection.Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl.End =&GT; KestrelTrace.ConnectionKeepAlive |连接ID&#34; 0HL4SVIU4EDP3&#34;完成保持活跃的反应。 | Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelTrace.ConnectionKeepAlive
以下是来自API服务器的错误日志
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>d__6.MoveNext()
| Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware + d__6.MoveNext 610 | RD0003FF635548 |错误|红隼| d__2.MoveNext =&gt; Frame.ReportApplicationError =&GT; KestrelTrace.ApplicationError |连接ID&#34; 0HL4SVIU4EDP2&#34;:未处理的异常被抛出 application.EXCEPTIONSystem.InvalidOperationException:IDX10803: 无法从以下位置获取配置: &#39; https://myauthserver/.well-known/openid-configuration&#39 ;. ---&GT; System.IO.IOException:IDX10804:无法从以下位置检索文档: &#39; https://myauthserver/.well-known/openid-configuration&#39 ;. ---&GT; System.Net.Http.HttpRequestException:发送时发生错误 请求。 ---&GT; System.Net.Http.WinHttpException:安全性错误 发生在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)
在System.Net.Http.WinHttpHandler.d__105.MoveNext()
---内部异常堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Net.Http.HttpClient.d__58.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.d__8.MoveNext() ---内部异常堆栈跟踪结束---在Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.d__8.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.d__3.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)
在 Microsoft.IdentityModel.Protocols.ConfigurationManager1.<GetConfigurationAsync>d__24.MoveNext() --- End of inner exception stack trace --- at Microsoft.IdentityModel.Protocols.ConfigurationManager
1.d__24.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.<HandleAuthenticateAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.<HandleAuthenticateAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult() 在 Microsoft.AspNetCore.Authentication.AuthenticationHandler1.<InitializeAsync>d__52.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
1.d__18.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) IdentityServer4.AccessTokenValidation.IdentityServerAuthenticationMiddleware.d__7.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware
在 Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.d__7.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.d__6.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.d__6.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware.d__8.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Microsoft.AspNetCore.Hosting.Internal.RequestServicesContainerMiddleware.d__3.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)
在 Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame`1.d__2.MoveNext() | Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelTrace.ApplicationError
在Identity Server(AuthServer)本身上没有生成日志。
我在Debug log
中找到了以下有趣的内容WAS-DEFAULT-HOSTNAME:myapiserver.azurewebsites.net
这指向Azurewebsite网址,而不是myapiserver.mydomain.com,我已经在azure域设置上配置了它。不确定这是否对此有任何影响,但无论如何......
最终编辑:
我已经找到了这个问题的根源。基本上在App服务中,您只能访问CurrentUser的个人商店,这意味着自签名证书不起作用。您需要购买一个真实的。 (拇指向下到Mircorsoft Azure!)。
由于
答案 0 :(得分:4)
您确定自己的设置是否正确?这是我们办理证书的方式:
WEBSITE_LOAD_CERTIFICATES
与指纹在我的ConfigureServices
:`
var certs = new X509Certificate2Collection();
if (CurrentEnvironment.IsDevelopment())
{
certs.Add(new X509Certificate2(Configuration["X509Certificate:CertificateName"], Configuration["X509Certificate:CertificatePassword"]));
} else
{
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
certs = store.Certificates.Find(X509FindType.FindByThumbprint, Configuration["WEBSITE_LOAD_CERTIFICATES"], false);
}
然后:.AddSigningCredential(certs[0])
答案 1 :(得分:-2)
如果您正在运行IIS,请检查运行Appool帐户的帐户是否具有证书私钥的访问权限。
启动MMC添加证书插件然后选择您的证书并转到操作 - &gt;所有任务 - &gt;管理私钥并确保帐户具有正确的权限。
也许还将证书放在LocalMachine而不是CurrentUser?
最后检查安全组/防火墙问题是否阻止从服务器到域的通信并返回到服务器。我们在AWS ElasticBeanstalk环境中观察到类似的问题('IDX10803:无法从:https://myauthserver.com/.well-known/openid-configuration'获取配置)。
祝你好运!