尝试从curl访问Azure App日志流,如Azure Kudu网页所示。我在Windows 10命令提示符下。这是我正在尝试的示例命令行:
curl -u myUserName https://myApp.scm.azurewebsites.net/api/logstream
Enter host password for user 'myUserName':<password typed here>
myApp
:是我的Azure App服务的名称。
myUserName
:
$myApp
并且密码是一个60字符长的字符串。在这两种情况下,curl都会显示网页标题的内容 401 - 未经授权:由于凭据无效而拒绝访问。。我还尝试在双引号内包装用户名,以及用反斜杠(\)转义美元符号($)。没有运气。
我必须做一些非常愚蠢的事情。我已经浏览了几个文档和帖子,例如official Kudu docs,msdn,here on SO,我想我正在按照说明操作。其他来源:MSDN again,old seirer post。修改
建议之后,我尝试使用用户级部署凭据访问https://myApp.scm.azurewebsites.net/basicauth,并使用VS Web部署凭据(转义和未转义):没有运气。我还再次保存了用户级密码,以防万一我之前犯了错误。
然后我从curl切换到Insomnia客户端。
当我点击basicauth
时,无论是用户级部署凭据还是Web部署凭据,都会正确显示实际的Kudu页面。
当我使用两个凭据点击api/logstream
时,似乎请求永远不会返回,我猜这是由于日志输出的连续流量。
因此,与Insomnia客户端相比,似乎从命令行开始使用curl会发生一些有趣的事情。我正在使用的卷曲版本:
卷曲7.55.1(Windows)libcurl / 7.55.1 WinSSL
发布日期:[未发布]
协议:dict文件ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
功能:AsynchDNS IPv6大文件SSPI Kerberos SPNEGO NTLM SSL
再次回到curl:
当我删除-u
选项(以及密码提示)并手动添加由Insomnia生成的基本身份验证标头时,一切都很好。
当我使用-u
选项传递myUserName:myPassword
时,一切都很好。因此,在其提示符下键入密码的方式确实如此。
编辑#2
再次,在@David Ebbo建议之后,详细的curl输出显示计算出的Base-64令牌似乎是错误的。
=
结尾。 -v
输出中显示的那个是20个字符长,以双=
结尾。根据this,这可能是因为跟踪换行被视为密码的一部分。但无论如何,不知道如何继续前进。在这一点上,只需了解正在发生的事情,已经有了解决方法。为了完整起见,这是(编辑的)详细日志:
* Trying xxx.xx.xx.xxx...
* TCP_NODELAY set
* Connected to myApp.scm.azurewebsites.net (xxx.xx.xx.xxx) port 443 (#0)
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 1/3)
* schannel: disabled server certificate revocation checks
* schannel: verifyhost setting prevents Schannel from comparing the supplied target name with the subject names in server certificates.
* schannel: sending initial handshake data: sending 186 bytes...
* schannel: sent initial handshake data: sent 186 bytes
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 2/3)
* schannel: failed to receive handshake, need more data
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 2/3)
* schannel: encrypted data got 2904
* schannel: encrypted data buffer: offset 2904 length 4096
* schannel: received incomplete message, need more data
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 2/3)
* schannel: encrypted data got 818
* schannel: encrypted data buffer: offset 3722 length 4096
* schannel: sending next handshake data: sending 126 bytes...
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 2/3)
* schannel: encrypted data got 51
* schannel: encrypted data buffer: offset 51 length 4096
* schannel: SSL/TLS handshake complete
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 3/3)
* schannel: stored credential handle in session cache
* Server auth using Basic with user 'myUserName'
> GET /api/logstream HTTP/1.1
> Host: myApp.scm.azurewebsites.net
> Authorization: Basic {{CALCULATED TOKEN}}
> User-Agent: curl/7.55.1
> Accept: */*
>
* schannel: client wants to read 102400 bytes
* schannel: encdata_buffer resized 103424
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: encrypted data got 1501
* schannel: encrypted data buffer: offset 1501 length 103424
* schannel: decrypted data length: 1472
* schannel: decrypted data added: 1472
* schannel: decrypted data cached: offset 1472 length 102400
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: decrypted data buffer: offset 1472 length 102400
* schannel: schannel_recv cleanup
* schannel: decrypted data returned 1472
* schannel: decrypted data buffer: offset 0 length 102400
< HTTP/1.1 401 Unauthorized
< Content-Type: text/html
< Server: Microsoft-IIS/10.0
* Authentication problem. Ignoring this.
< WWW-Authenticate: Basic realm="site"
< Date: Wed, 13 Jun 2018 21:23:59 GMT
< Content-Length: 1293
<
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>
{{... CONTINUES}}
答案 0 :(得分:3)
要从其他答案中继续学习。
使用
curl -u 'myUserName:password' https://myApp.scm.azurewebsites.net/api/logstream
其中用户名和密码是发布用户名和密码。这些可以在您的Azure门户的“ Azure功能”概述菜单项中找到。单击Get publish profile
以获取XML文件。在XML中寻找Web Deploy
发布配置文件元素。此元素包含userName
和userPWD
属性,它们是您的发布用户名和密码。
您的用户名很可能以$
开头。如果您使用bash或其中一个shell,则必须在curl -u
参数中使用单引号。使用双引号将导致参数替换。
答案 1 :(得分:2)
尝试:
curl -u 'myUserName:password' https://myApp.scm.azurewebsites.net/api/logstream