尝试在JavaMail中使用NTLM连接到Exchange服务器.我可以连接到SMTP,但不能连接到IMAP.我还可以使用相同的主机/用户名/密码,帐户类型="IMAP",端口143,ssl = false,身份验证= NTLM,域名=""通过OS X Mail.app应用程序进行身份验证.
连接代码:
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Store;
import java.util.Properties;
public class NTLMTest {
public static void main(String[] args) throws Exception {
final String host = "example.com";
final String user = "bob";
final String password = "password";
final Properties properties = new Properties();
Session session = Session.getDefaultInstance(properties);
session.setDebug(true);
// SMTP CONNECT
final Transport transport = session.getTransport("smtp");
transport.connect(host, user, password);
System.out.println("SMTP Connect successful");
// IMAP CONNECT
final Store store = session.getStore("imap");
store.connect(host, user, password);
System.out.println("IMAP Connect …Run Code Online (Sandbox Code Playgroud) 任何人都知道是否可以使用NTLM的Windows身份验证进行反向代理?我找不到任何这方面的例子.more_set_headers字段的值应该是多少?
location / {
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
more_set_input_headers 'Authorization: $http_authorization';
proxy_set_header Accept-Encoding "";
proxy_pass http://host/;
proxy_redirect default;
#This is what worked for me, but you need the headers-more mod
more_set_headers -s 401 'WWW-Authenticate: Basic realm="host.local"';
}
Run Code Online (Sandbox Code Playgroud)
如果我直接访问主机,则如果我使用反向代理访问身份验证,则每次身份验证都会失败.
我正在尝试使用Apache/Jakarta HttpClient 4.1.1使用给定的凭据连接到任意网页.为了测试这一点,我在运行的dev机器上安装了最少的IIS 7.5,其中一次只有一种身份验证模式处于活动状态.基本身份验证工作正常,但每当我尝试登录时,Digest和NTLM都会返回401错误消息.这是我的代码:
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpget = new HttpGet("http://localhost/");
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY,
new NTCredentials("user", "password", "", "localhost"));
if (!new File(System.getenv("windir") + "\\krb5.ini").exists()) {
List<String> authtypes = new ArrayList<String>();
authtypes.add(AuthPolicy.NTLM);
authtypes.add(AuthPolicy.DIGEST);
authtypes.add(AuthPolicy.BASIC);
httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF,
authtypes);
httpclient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF,
authtypes);
}
localContext.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider);
HttpResponse response = httpclient.execute(httpget, localContext);
System.out.println("Response code: " + response.getStatusLine());
Run Code Online (Sandbox Code Playgroud)
我在Fiddler中注意到的一件事是Firefox和HttpClient发送的哈希值不同,这让我觉得IIS 7.5可能比HttpClient提供更强的哈希值?有任何想法吗?如果我能够验证这适用于NTLM,那就太棒了.摘要也会很好,但如果有必要,我可以不用它.
正如标题所述,我们正在寻找一种方法来访问Windows集成(NTLM)身份验证背后的.NET 3.5 Web服务.
我们整整一周都在搜索互联网和本论坛,我们还没有找到解决这个问题的方法.
我们尝试过,DefaultHttpConnections,HttpPost,HttpGet等的不同变体.
但是,我们试图验证自己,我们遇到这些:
SSLHandshakeException
Run Code Online (Sandbox Code Playgroud)
要么
Authentication scheme ntlm not supported
Authentication error: Unable to respond to any of these challenges:
ntlm=WWW-Authenticate: NTLM, negotiate=WWW-Authenticate: Negotiate
Run Code Online (Sandbox Code Playgroud)
IIS身份验证设置如下:

我们尝试访问的页面是默认站点的子文件夹中的.aspx,我们没有优势,也不能将身份验证更改为默认站点.
我知道互联网中有很多其他人也有类似的问题.
此外,我们正在开发的应用程序不应该使用Web视图.
任何有关如何解决这个问题的建设性指示都将受到高度赞赏.提前致谢.
更新:我们现在已经更改了服务以执行基本身份验证和ntlm身份验证.
当我们将下面的代码运行到localhost测试服务器时,我们得到了正确的响应,localhost没有任何类型的身份验证机制.答复如下:
<soap:Body>
<FooResponse xmlns="uri:FlexAPI">
<FooResult>
<typeFooBar>
<FooNumber>4545</FooNumber>
<BarNumber>1</BarNumber>
</typeFooBar>
</FooResult>
</FooResponse>
</soap:Body>
Run Code Online (Sandbox Code Playgroud)
但是,当我们在经过身份验证的服务器上运行以下代码时,我们会得到此信息
org.xmlpull.v1.XmlPullParserException:expected:START_TAG { http://schemas.xmlsoap.org/soap/envelope/ } Envelope(位置:START_TAG @ 2:44 in java.io.InputStreamReader@4054b398)
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("Foo", Bar.getText().toString());
request.addProperty("Foo", Bar.getText().toString());
request.addProperty("Foo", Bar() );
request.addProperty("Foo", Bar.getText().toString());
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true; …Run Code Online (Sandbox Code Playgroud) 我在这里看到很多关于git和代理主题的问题,但没有一个能解决我的问题.我正在从Bitbucket克隆一个git存储库.从我的家庭网络一切正常,但挂起工作,我们使用代理与NTLM身份验证.请参阅git clone命令的输出:
$ git clone https://my_user@bitbucket.org/my_user/my_project.git --verbose
Cloning into 'my_project'...
Password for 'https://my_user@bitbucket.org':
POST git-upload-pack (174 bytes)
remote: Counting objects: 548, done.
remote: Compressing objects: 100% (367/367), done.
remote: Total 548 (delta 216), reused 0 (delta 0)
Receiving objects: 100% (548/548), 5.28 MiB | 533 KiB/s, done.
Resolving deltas: 100% (216/216), done.
Run Code Online (Sandbox Code Playgroud)
git clone命令总是挂起"Resolving deltas".
我的设置:
代理配置:
$git config --global http.proxy http://MY_DOMAIN\\\my_user:my_password@http-proxy:8080
Run Code Online (Sandbox Code Playgroud)似乎这个问题与git对象大小有某种关系,因为当我只在我的存储库中存在少量文件时,git clone就开始工作了.
我正在尝试打开与NTLM身份验证方案保护的URL的http连接.当我们使用Java 6时,这段代码已经正常工作了2年.我写了一个小的java程序,它访问该特定的url,使测试用例尽可能简单.
问题是我无法使程序在Linux上运行,并且在使用JDK 7的版本时.Java尝试20次访问URL,然后我收到一个错误,告诉我服务器重定向次数太多.它适用于linux和JDK 6,以及带有JDK 6或7的Windows 7.
我检查并尝试了此处列出的解决方案(和许多其他人):获取"java.net.ProtocolException:服务器重定向次数太多"错误.它没用.我还要补充一点,当从浏览器访问URL时,我可以看到没有涉及cookie.
以下是我尝试过的os/java版本的确切细节:
成功:
失败:
当程序工作时,我看到使用的身份验证方法和我尝试下载的文档作为输出:
Scheme:Negotiate
Scheme:ntlm
.... document content ....
Done
Run Code Online (Sandbox Code Playgroud)
当它失败时,我有以下输出:
Scheme:Negotiate
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
java.net.ProtocolException: Server redirected too many times (20)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1635)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) …Run Code Online (Sandbox Code Playgroud) 我在Debian 8上运行PHP 5.6.17和Apache 2.4.10.
我想$_SERVER['REMOTE_USER']用Windows用户名填充PHP变量,如果用户名在我的数据库中,则登录用户.我对此方法涉及的安全风险感到满意,因为这只会暴露在本地网络上.
这是我在Apache vhost定义中所做的:
<LocationMatch "/login/ssologin">
PerlAuthenHandler Apache2::AuthenNTLM
AuthBasicAuthoritative on
AuthType ntlm
AuthName "hello"
Require valid-user
PerlAddVar ntdomain "my.local"
PerlSetVar defaultdomain my.local
PerlSetVar splitdomainprefix 1
PerlSetVar ntlmauthoritative off
PerlSetVar ntlmdebug 1
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
我将URL放入Internet Explorer中的受信任站点,但仍然提示我进行基本身份验证.
我错过了什么?
我唯一的目标是获取Windows会话的用户名.还有另一种更简单的方法吗?
我想在Intranet中自动登录.
我们的基础设施正在追随(无法改变):
test.localldap.local我安装authnz_sspi_module在Web服务器上并配置.htaccess:
AuthName "test"
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain ldap.local
SSPIOmitDomain On
SSPIOfferBasic Off
SSPIBasicPreferred Off
SSPIOfferSSPI On
Require valid-user
Run Code Online (Sandbox Code Playgroud)
在Firefox中about:config我换network.automatic-ntlm-auth.trusted-uris到test.local.
然后Firefox不会要求输入用户名和密码,而是立即打印401 Unauthorized页面.Apache在错误日志中打印用户名或密码不正确且该用户未知.
在Chrome(没有额外配置)它要求凭据,当我提供它们时,我也得到401错误.
我在Windows服务器上启用了NTLM审核.在事件日志中从Chrome进行日志记录时会出现两个事件 - Audit Success其中安全ID是域名用户名,第二个Audit Failure是安全ID NULL SID.从Firefox输入页面时,只创建一个事件 - Audit Failure具有安全ID NULL SID.
当我打开基本身份验证时,Firefox要求输入两次用户名和密码并重定向到www.test.local并说明连接已重置.
也许Windows服务器配置不正确?我花了一整天时间搜索网页并尝试不同的配置,没有一个工作.一种配置用于提示用户输入用户名和密码,但是,我再也不能重复了.
有谁知道问题出在哪里以及如何让它发挥作用?
我一直在开发一个应用程序,其中有一个简单的UIWebView,显示一个Sharepoint站点.我原本以为NTLM身份验证会是一个问题,但事实证明这是非常直接的.但是,自iOS8以来,我的应用程序一直在发送垃圾邮件"Stream在打开之前发送一个事件"在我的日志中一遍又一遍,以至于页面真的永远无法加载.
我最初认为这是我正在做的事情,所以我创建了一个小应用程序(下面),以消除我的其他应用程序可能有的任何奇怪,但不幸的是我得到相同的问题.我想我的主要问题是我不知道从哪里开始寻找这个问题的答案.互联网已经提到了这一点,但没有明确的解决方案,如[webView dontDoThat].:d
我正在玩手动添加连接到运行循环,你会在代码中看到这一点.我已经尝试了各种方式,我知道如何创建连接,但这是最近的尝试.
我开始处理SSL质询,因为我的证书对域名无效,然后我得到NTLM质询并发送硬编码用户名并作为测试传递.它部分加载了网站,但最终放弃了加载我认为是这个错误的所有资源.理论欢迎.
//
// ViewController.m
//
// Created by Greg Frame on 10/2/14.
//
#import "ViewController.h"
#define APPURL @"https://mysharepoint.com"
#define USERNAME @"usernamehere"
#define PASSWORD @"passwordhere"
@interface ViewController ()
@end
@implementation ViewController
BOOL _Authenticated = NO;
BOOL _SSLAuthenticated = NO;
NSURLConnection *_Connection;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.webView.delegate = self;
NSURLRequest *requestURL = [NSURLRequest requestWithURL:[NSURL URLWithString:APPURL]];
[self.webView loadRequest:requestURL];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// …Run Code Online (Sandbox Code Playgroud)