【发布时间】:2017-10-13 18:15:33
【问题描述】:
在 Azure 应用服务上部署身份服务器时遇到问题。以下是设置。
JSclient 在本地托管。 身份验证服务器位于 Azure 应用服务上。
var certificate = SSLHelper.GetCertificateCurrentUserMyStore(signingsslthumbprint);
builder
.AddSigningCredential(certificate)
.AddSecretParser<ClientAssertionSecretParser>()
.AddSecretValidator<PrivateKeyJwtSecretValidator>()
.AddAspNetIdentity<User>()
.AddProfileService<ProfileService>();
我创建了两个证书,一个用于签名,另一个用于交换。
`New-SelfsignedCertificateEx -Subject "CN=devsignature" -EKU 1.3.6.1.5.5.7.3.3 -KeySpec "Signature" -KeyUsage "DigitalSignature" -StoreLocation "CurrentUser" -SAN $domains -SignatureAlgorithm "SHA256" - KeyLength 2048 -FriendlyName "DevSignature" -NotAfter $([System.DateTime]::Now.AddYears(15)) -Exportable
New-SelfsignedCertificateEx -Subject "CN=*.mydomain.com" -EKU 1.3.6.1.5.5.7.3.1 -KeySpec "Exchange" -KeyUsage "DigitalSignature" -StoreLocation "CurrentUser" -SAN $domains -SignatureAlgorithm " SHA256" -KeyLength 2048 -FriendlyName "DEVExchange" -NotAfter $([System.DateTime]::Now.AddYears(15)) -Exportable`
以下是用于检索所有证书的应用服务设置。
当我在 Windows 机器上部署身份验证服务器(不是本地机器,而是在另一台服务器上)时,这有效。但是,当我部署到 IIS 时 ...
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>d__6.MoveNext() | Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke
119 | 2017-05-14 20:32:04.4131 | RD0003FF635548 |错误 |异常处理程序中间件 | AsyncTaskMethodBuilder.Start => d__8.MoveNext => ExceptionHandlerMiddleware.Invoke |发生未处理的异常:未配置签名凭据。无法创建 JWT 令牌EXCEPTIONSystem.InvalidOperationException:未配置签名凭据。无法创建 JWT 令牌
我正在使用开发证书(不是真正的)。因此,这是用于分阶段部署。
过去两天一直在尝试,但无法正常工作。
编辑:这甚至没有命中 api 服务器。这只是JSClient登录重定向到-> AuthServer的时候。
有人可以帮忙吗?
谢谢,
编辑:
感谢@moritzg 和@Austin Dimmer,让我更进一步。现在,当我使用令牌调用 webapi 时,它会抛出“IDX10803:无法从:'https://myauthserver.com/.well-known/openid-configuration'获取配置”。
有什么想法吗?
编辑2:
以下是来自 api 服务器的调试日志
643 | RD0003FF635548 | DEBUG | LoggingConnectionFilter | MoveNextRunner.InvokeMoveNext => <ReadAsync>d__16.MoveNext =>LoggingStream.Log |异步读取[2266] 47 45 54 20 2F 61 70 69 2F 63 6F 6F 6D 6D 6F 6E 2F 63 61 74 61 ...... 获取 /api/myendpoint HTTP/1.1 Cache-Control:无缓存连接:Keep-Alive Pragma: no-cache Accept: text/plain Accept-Encoding: gzip, deflate, sdch, br Accept-Language: en-US,en;q=0.8 Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkVEQTYsdfsdfdsfsdfdsfdscHM6......... 饼干:ARRAffinity=e414d40c85d90229be06c3c9de2fzxczxczxc3....... 主机:myapiserver 最大转发数:10 推荐人: 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-Live 升级:1 X-WAWS-Unencoded-URL:/api/myendpoint X-Original-URL:/api/myendpoint X-ARR-LOG-ID:7c2afdfe4c-d3ea-dfer-9570-ffgfgfgfgfd 伪装主机: 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=XX, 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 |调试 |记录连接过滤器 | StreamSocketOutput.ProducingComplete => LoggingStream.Write => 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 服务器:红隼
| Microsoft.AspNetCore.Server.Kestrel.Filter.Internal.LoggingStream.Log 651 | RD0003FF635548 |调试 |红隼 | Frame.WriteSuffix => Connection.Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl.End => KestrelTrace.ConnectionKeepAlive |连接 ID“0HL4SVIU4EDP3”已完成保持活动响应。 | 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 => Frame.ReportApplicationError => KestrelTrace.ApplicationError |连接 ID“0HL4SVIU4EDP2”:未处理的异常由 application.EXCEPTIONSystem.InvalidOperationException:IDX10803: 无法从以下位置获取配置: 'https://myauthserver/.well-known/openid-configuration'。 ---> System.IO.IOException:IDX10804:无法从以下位置检索文档: 'https://myauthserver/.well-known/openid-configuration'。 ---> System.Net.Http.HttpRequestException:发送时出错 请求。 ---> 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(Task 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Net.Http.HttpClient.d__58.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.d__8.MoveNext() --- 内部异常堆栈跟踪结束 --- 在 Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.d__8.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.d__3.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 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.ConfigurationManager1.d__24.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 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.TaskAwaiter1.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() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 IdentityServer4.AccessTokenValidation.IdentityServerAuthenticationMiddleware.d__7.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 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() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.d__6.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.d__6.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware.d__8.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Microsoft.AspNetCore.Hosting.Internal.RequestServicesContainerMiddleware.d__3.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 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) 本身没有生成日志。
我在调试日志中发现了以下一些有趣的地方
WAS-DEFAULT-HOSTNAME:myapiserver.azurewebsites.net
这是指向 Azurewebsite url 而不是 myapiserver.mydomain.com,我已经在 azure 域设置中配置了它。不确定这是否对此有任何影响,但无论如何......
最终编辑:
我已经找到了这个问题的根源。基本上在应用服务中,您只能访问 CurrentUser 的个人商店,这意味着自签名证书将不起作用。您将需要购买一个真实的。 (对 Mircorsoft Azure 赞不绝口!)。
谢谢
【问题讨论】:
-
刚刚注意到您的编辑,当您的
resource server(webapi) 无法访问IdentityServer时,您会遇到错误。或者你以某种方式弄乱了那个 URL。你能检查一下你是否可以访问它吗? -
我可以使用浏览器访问该网址('myauthserver.com/.well-known/openid-configuration'.)。
-
有趣的是,Identity Server 4 文档docs.identityserver.io/en/release/topics/apis.html 上有一篇文章建议启用对 .NET 框架 452 的 TLS 支持。在 Azure App Service 上,它配置为 4.6。因此,我尝试了该文档中给出的 bith 452 和 462,但它仍然失败。仅供参考,我正在为应用程序使用 dotnet core。
-
好的,您可以打开您的
IdentityServer登录并将日志粘贴到这里吗?我认为这绝对是证书问题。
标签: ssl deployment oauth identityserver4 azure-web-app-service