2015-09-07 166 views
0

不推荐使用DefaultHttpHandler,HttpURLConnection不支持NTLM,并且NTLM似乎是ASP.NET MCV网站唯一受到良好支持的协议。那么,还有什么要做?Android Windows身份验证

在我们的业务中,我们使用微软。我们登录使用微软,我们的webmail是由微软完成的,我们的平板电脑应用程序是Android ...

目前我正在开发一个需要连接到ASP.NET实体框架webinterface的项目。此web界面托管在配置了Windows身份验证的IIS上,使用NTLM作为提供程序。

我正在制作的应用程序必须访问此webinterface。所以,我要求用户输入他们的用户名和密码,并且想要登录web界面。但是,Android根本不支持NTLM。我一直在环顾四周,但看起来这种组合相当罕见。我想知道,我有什么选择?

我被允许惹恼任何事情。唯一的要求是用户使用他们的Microsoft帐户登录,并且我们不希望使用价格过高的Xamarin。你会推荐什么?

+0

IMO,你可以阅读[我的答案在这里](http://stackoverflow.com/questions/31466653/how-to-use-security-authentication-authorization-in-as-web-api/31471027#31471027) – BNK

+0

查看JCIFS jar。用它来启动和运行我们的NTLM。如果你需要帮助,我会发布我是如何在这里做到的! – Smashing

+0

@Smashing我见过JCIFS几次,但据我所知只与DefaultHttpHandler。我会更多地考虑一下,但是如果你能够提供一个关于如何使用HttpURLConnection的例子,那会很棒。 –

回答

0

好的,我做的第一件事就是导入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对此没有本地支持是非常糟糕的。

+1

使用HttpURLConnection的示例:http://stackoverflow.com/a/34321230/2073804 – ron190

+0

@RonRon感谢您的评论。我一定会考虑它! – Smashing

+0

我已经添加了上面提到的代码和库和包中的两个类,但我得到401响应和我的凭据是正确的我已检查,请你能帮我解决这个 – alex

0

只是做FBA在MCV https://msdn.microsoft.com/en-us/library/ff398049(v=vs.100).aspx

这是很好的支持。

+0

这确实可以使应用程序轻松连接。但是,据我所知,这不使用活动目录,而是使用单独的表。我们不希望让员工在不同的地方注册。也许对别人来说,这将是一个解决方案,但不幸的是对我来说不是。 –

+0

您可以在任何地方指出FBA用户名和密码。使用MS DE类https://msdn.microsoft.com/en-us/library/System.DirectoryServices.DirectoryEntry(v=VS.110).aspx – markgamache