Blog スタッフブログ

Android システム開発

[Android][Kotlin]Basic認証の通し方

システム開発担当のTFです。

※Android10対応(他バージョンの場合、細かい部分等が異なる事があります)

メモ

  • https://username:password@example.com この形式のBasic認証が効かない場合別途対応が必要
  • URLConnectionとFuelが効かなかったため、Basic認証用のコード追加

参考

  Java の URLConnection で基本認証を行う際のハマりどころ
  Fuel

サンプル

// URLConnection 利用
var url: URL = URL( "接続先URL" )
lateinit var istream: InputStream

if( isBasic ){
	// basic認証有りの場合
	var connection = url.openConnection()
	var authString = BuildConfig.AUTH_ID+":"+BuildConfig.AUTH_PASS
	connection.setRequestProperty("Authorization","Basic " + Base64.encodeToString( authString.toByteArray(), Base64.NO_WRAP))
	istream = connection.getInputStream()
}
else{
	// basic認証無しの場合
	istream = url.openStream()
}
// Fuel 利用
val apiUrl = "接続先URL"

var map = mutableMapOf<String,String?>()
	map.set("test", "test")
	
val header: HashMap<String, String> = hashMapOf(Headers.CONTENT_TYPE to "application/json; charset=UTF-8")
	header.put("X-Requested-With", "XMLHttpRequest")
	header.put(Headers.ACCEPT, "application/json")

if( isBasic ){
	// basic認証有りの場合
	val(_, response, result) = apiUrl.httpGet(map.toList()).header(header)
		.authentication().basic(BuildConfig.AUTH_ID, BuildConfig.AUTH_PASS)
		.responseJson()
}
else{
	// basic認証無しの場合
	val(_, response, result) = apiUrl.httpGet(map.toList()).header(header)
		.responseJson()
}