Android Windows身份验证
不推荐使用DefaultHttpHandler,HttpURLConnection不支持NTLM,并且NTLM似乎是ASP.NET MCV网站唯一受到良好支持的协议。那么,还有什么要做?Android Windows身份验证
在我们的业务中,我们使用微软。我们登录使用微软,我们的webmail是由微软完成的,我们的平板电脑应用程序是Android ...
目前我正在开发一个需要连接到ASP.NET实体框架webinterface的项目。此web界面托管在配置了Windows身份验证的IIS上,使用NTLM作为提供程序。
我正在制作的应用程序必须访问此webinterface。所以,我要求用户输入他们的用户名和密码,并且想要登录web界面。但是,Android根本不支持NTLM。我一直在环顾四周,但看起来这种组合相当罕见。我想知道,我有什么选择?
我被允许惹恼任何事情。唯一的要求是用户使用他们的Microsoft帐户登录,并且我们不希望使用价格过高的Xamarin。你会推荐什么?
好的,我做的第一件事就是导入JCIFS库。它是您从该链接下载的一个jar文件。
我需要做的下一件事是将JCIFSEngine类和NTLMSchemeFactory类导入到您的项目中。
于是最后这个方法建立你了HTTPClient:
//I know it is deprecated but there is no other way to implement NTLM thus far.
private static DefaultHttpClient setupHttpClient (String username, String password) {
DefaultHttpClient httpclient = new DefaultHttpClient();
// register ntlm auth scheme
httpclient.getAuthSchemes().register("ntlm", new NTLMSchemeFactory());
httpclient.getCredentialsProvider().setCredentials(
// Limit the credentials only to the specified domain and port
new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
// Specify credentials, most of the time only user/pass is needed
new NTCredentials(username, password, "", "")
);
return httpclient;
}
我的连接与改造完成,所以我只是将这个附加了HTTPClient使用以下行来改造:
retrofitAdapterBuilder.setClient(new ApacheClient(setupHttpClient(username, password)));
因此,这个工作对我来说甚至远不止 - 尽管Android对此没有本地支持是非常糟糕的。
只是做FBA在MCV https://msdn.microsoft.com/en-us/library/ff398049(v=vs.100).aspx
这是很好的支持。
这确实可以使应用程序轻松连接。但是,据我所知,这不使用活动目录,而是使用单独的表。我们不希望让员工在不同的地方注册。也许对别人来说,这将是一个解决方案,但不幸的是对我来说不是。 –
您可以在任何地方指出FBA用户名和密码。使用MS DE类https://msdn.microsoft.com/en-us/library/System.DirectoryServices.DirectoryEntry(v=VS.110).aspx – markgamache
IMO,你可以阅读[我的答案在这里](http://stackoverflow.com/questions/31466653/how-to-use-security-authentication-authorization-in-as-web-api/31471027#31471027) – BNK
查看JCIFS jar。用它来启动和运行我们的NTLM。如果你需要帮助,我会发布我是如何在这里做到的! – Smashing
@Smashing我见过JCIFS几次,但据我所知只与DefaultHttpHandler。我会更多地考虑一下,但是如果你能够提供一个关于如何使用HttpURLConnection的例子,那会很棒。 –