Android 与 IIS服务器身份验证
2015-07-02 17:31
495 查看
1)基础验证:
2)ntlm 身份验证:
直接替换 //基本验证 即可使用
使用jcifs-1.3.17.jar(可到https://github.com/masconsult/android-ntlm 进行下载)
/** * 从服务器取图片 * * @param url * @return */ public void getHttpBitmap(final String url) { new Thread(new Runnable() { public void run() { Bitmap bitmap = null; try { HttpGet httpPost = new HttpGet(url); DefaultHttpClient httpClient = new DefaultHttpClient(); // 基本身份验证 BasicCredentialsProvider bcp = new BasicCredentialsProvider(); String userName = "username"; String password = "password"; AuthScope authScope = new AuthScope(AuthScope.ANY); bcp.setCredentials(authScope , new UsernamePasswordCredentials(userName, password)); httpClient.setCredentialsProvider(bcp); //基本身份验证结束 HttpResponse httpResponse = httpClient.execute(httpPost); android.util.Log.i("", "=====>" + httpResponse.getStatusLine().getStatusCode()); android.util.Log.i("", "=====>" + httpResponse.getEntity().getContentLength()); InputStream is = httpResponse.getEntity().getContent(); bitmap = BitmapFactory.decodeStream(is); is.close(); } catch (Exception e) { e.printStackTrace(); } getResult(bitmap); } }).start(); }
byte[] encodedPassword = (userName + ":" + password).getBytes(); httpPost.addHeader("Authorization","Base " + Base64.encodetoString(encodedPassword, Base64.No_Wrap);
2)ntlm 身份验证:
// 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, "", "") );
直接替换 //基本验证 即可使用
使用jcifs-1.3.17.jar(可到https://github.com/masconsult/android-ntlm 进行下载)
public class NTLMSchemeFactory implements AuthSchemeFactory { @Override public AuthScheme newInstance(HttpParams params) { return new NTLMScheme(new JCIFSEngine()); } }
public class JCIFSEngine implements NTLMEngine { private static final int TYPE_1_FLAGS = NtlmFlags.NTLMSSP_NEGOTIATE_56 | NtlmFlags.NTLMSSP_NEGOTIATE_128 | NtlmFlags.NTLMSSP_NEGOTIATE_NTLM2 | NtlmFlags.NTLMSSP_NEGOTIATE_ALWAYS_SIGN | NtlmFlags.NTLMSSP_REQUEST_TARGET; @Override public String generateType1Msg(String domain, String workstation) throws NTLMEngineException { final Type1Message type1Message = new Type1Message(TYPE_1_FLAGS, domain, workstation); return Base64.encode(type1Message.toByteArray()); } @Override public String generateType3Msg(String username, String password, String domain, String workstation, String challenge) throws NTLMEngineException { Type2Message type2Message; try { type2Message = new Type2Message(Base64.decode(challenge)); } catch (final IOException exception) { throw new NTLMEngineException("Error in type2 message", exception); } final int type2Flags = type2Message.getFlags(); final int type3Flags = type2Flags & (0xffffffff ^ (NtlmFlags.NTLMSSP_TARGET_TYPE_DOMAIN | NtlmFlags.NTLMSSP_TARGET_TYPE_SERVER)); final Type3Message type3Message = new Type3Message(type2Message, password, domain, username, workstation, type3Flags); return Base64.encode(type3Message.toByteArray()); } }
相关文章推荐
- android Toast显示消息的几种方法
- Android 使用自定义字体
- Android:报" Incorrect line ending: found carriage return (\r) without corresponding newline (\n) "解决
- Android之spinner控件的用法
- Android 百分比布局库(percent-support-lib) 解析与扩展
- Android 科大讯飞语音交互API简单使用
- Android NDK开发Crash错误定位
- Android SDK开发包国内下载地址
- Android圆环控件
- android SharedPreferences 存储对象
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- Android涉及到的设计模式
- 切换到android studio遇到的svn问题
- Android 音频问题汇总
- Android blog学习
- Android 代码设置RelativeLayout元素居中
- android 更换字体
- Android 消息处理源码分析(1)
- Android开机自动启动程序
- qt android录音程序添加 Android 权限