SlideShare a Scribd company logo
1 of 62
Download to read offline
NSURLProtectionSpace Authentication Methods
iOSにおける認証の種類とその取り扱い
@ niwatako
NSURLProtectionSpace Authentication Methods
iOSにおける認証の種類とその取り扱い
一部調査段階の内容を含むので

必要に応じて動作確認の上、ご利用ください
2016/03/05 yidev 第22回勉強会 : ATND https://atnd.org/events/74803 にて

より詳細な内容で発表したいと思っています。
認証を制御する通信周りの Delegate
WKNavigationDelegate

- webView:didReceiveAuthenticationChallenge:completionHandler:



NSURLSessionDelegate
- URLSession:didReceiveChallenge:completionHandler:
NSURLConnectionDelegate
- connection:didReceiveAuthenticationChallenge: (Deprecated)
Ops!

(これはWKWebViewで認証が必要なページをロードした様子です)
ちゃんと実装していないと中断して何も表示されない!
これらのDelegateの基本的な取り扱い方
WKNavigationDelegate

- webView:didReceiveAuthenticationChallenge:completionHandler:



NSURLSessionDelegate
- URLSession:didReceiveChallenge:completionHandler:
NSURLConnectionDelegate
- connection:didReceiveAuthenticationChallenge: (Deprecated)
認証に必要な認証情報を持った NSURLCredential を作って返す。
func webView(webView: WKWebView,
didReceiveAuthenticationChallenge challenge:
NSURLAuthenticationChallenge,
completionHandler: (NSURLSessionAuthChallengeDisposition,
NSURLCredential?) -> Void) {
let credential: NSURLCredential
/* credential = ... 適切な内容で NSURLCredential を作る */
completionHandler(.UseCredential, credential)
}
NSURLCredential には、

各種認証の種類に合わせて3つのイニシャライザが用意されている。
• - initWithUser:password:persistence:

ユーザー名とパスワード
• - initWithTrust:

サーバー証明書
• - initWithIdentity:certificates:persistence:

クライアント証明書
func webView(webView: WKWebView,
didReceiveAuthenticationChallenge challenge:
NSURLAuthenticationChallenge,
completionHandler: (NSURLSessionAuthChallengeDisposition,
NSURLCredential?) -> Void) {
let credential: NSURLCredential
/* credential = ... 適切な内容で NSURLCredential を作る */
completionHandler(.UseCredential, credential)
}
認証の種類を確認して、

func webView(webView: WKWebView,
didReceiveAuthenticationChallenge challenge:
NSURLAuthenticationChallenge,
completionHandler: (NSURLSessionAuthChallengeDisposition,
NSURLCredential?) -> Void) {
let credential: NSURLCredential
/* credential = ... 適切な内容で NSURLCredential を作る */
completionHandler(.UseCredential, credential)
}
challenge.protectionSpace.authenticationMethod
認証の種類を確認して、

func webView(webView: WKWebView,
didReceiveAuthenticationChallenge challenge:
NSURLAuthenticationChallenge,
completionHandler: (NSURLSessionAuthChallengeDisposition,
NSURLCredential?) -> Void) {
let credential: NSURLCredential
/* credential = ... 適切な内容で NSURLCredential を作る */
completionHandler(.UseCredential, credential )
}
challenge.protectionSpace.authenticationMethod
認証の種類を確認して、

必要なNSURLCredential を作って返す。
NSURLProtectionSpace Authentication Methods
認証の種類がいっぱいあってわからん!
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
全部チェックしてみます。
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
といいつつ

一旦、1つ飛ばして 2つ目からご説明します
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
HTTPBasic
Basic認証
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
そして1つ目に戻ります
NSURLAuthenticationMethodDefault
• その昔はBasic認証の時呼ばれたみたい
• Basic認証は現在

NSURLAuthenticationMethodHTTPBasic

が呼ばれる
• とつぜん

NSURLAuthenticationMethodHTTPBasic

が呼ばれるようになって困った人の悲鳴が観測された
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
Digest認証 (Basic認証のセキュリティ強度少し強い版)
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
NSURLAuthenticationMethodHTMLForm
• HTMLForm認証なんて聞いたことない!と思ったら…
• 通常のURLロードでは発生しないダミーの認証方式
• ユーザーカスタマイズ用
• 認証情報をNSURLCredentialStorageで管理して

保存・取り出したい時用の分類
こういう機能を独自実装するとき用?
// 【A】カスタムの認証情報(例:ユーザー名とパスワード)を作成
let credential = NSURLCredential(
user: "niwatako",
password: "jellyfish",
persistence: .ForSession
)
// 【B】カスタム認証情報保存用の NSURLProtectionSpace (認証の掛かった通信先を表す) を作成
let HTMLFormSpace = NSURLProtectionSpace(
host: "niwatako.tako",
port: 443,
`protocol`: "https",
realm: nil, // realm... Digest認証などで必要、サーバー側のAuthNameにあたる
authenticationMethod: NSURLAuthenticationMethodHTMLForm
)
// CredentialStorage へ、【B】 に紐付ける形で【A】を保存
let credentialStorage = NSURLCredentialStorage.sharedCredentialStorage()
credentialStorage.setCredential(credential, forProtectionSpace: HTMLFormSpace)
/* —————————————————————————————————————————————————————————————————————————————— */
// CredentialStorage から、【B】 を指定して【A】を取り出し
if let credentials = credentialStorage.credentialsForProtectionSpace(HTMLFormSpace) {
for case let (username, credential) in credentials {
print("(username)'s password is (credential.password ?? "NULL")")
}
}
※上記の方法でID情報を保存できるとしても、

 表示中のWebサイトのログイン情報の保存や自動入力は

 独自にWebサイトのフォームを解析して実装する必要がありそうです。
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
Kerberos認証
NSURLAuthenticationMethodNegotiate
• Windowsサーバの認証機能
• ユーザー名とパスワードの認証
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
NSURLAuthenticationMethodNTLM
• Windowsサーバの認証機能
• ユーザー名とパスワードの認証
• 堅牢性はKerberos認証に劣る
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
クライアント認証
NSURLAuthenticationMethodClientCertificate
• https:// のクライアント認証
• https の(相手の信頼性を確認し経路を暗号化する)通信は

大抵、サーバーの証明書をクライアントがチェックするが

これはクライアント側が証明書をインストールしておき、

サーバーの方がクライアントの持つ証明書をチェックする
クライアント認証

(iOSもメール等に証明書を添付すればインストールして使える)
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
NSURLAuthenticationMethodServerTrust
• よくある https:// から始まる SSL/TLS認証

サーバーの証明書を確認し、安全性を確かめる
• “ユーザー名&パスワード認証” 系と性質が異なり

クライアント側が「サーバーは信頼できるか?」チェックする立場
• 認証失敗でも接続確立(強制的にサーバーを信頼)することは可能で、

実際、続行して接続確立したい場合がある
• 社内サーバー等の自己署名証明書

(=信頼できる第三者機関発行でない証明書)
• ドメインに証明書が発行されたサイトにIPで接続する時
• 証明書の有効期限切れ …etc
SSL/TLS認証 - 安全なサーバーに接続できた時
SSL/TLS認証 - サーバーの安全性を確認できなかった時
SSL/TLS認証 - サーバーの安全性を確認できなかった時
たとえ認証に失敗しても

そのサーバーとの接続を確立するかどうかは

クライアント側が決められる
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
コンプリートしました!
整理すると?
通信を行うクラスは

通信時に発生した認証を取り扱うためのデリゲートを持つ
WKNavigationDelegate

- webView:didReceiveAuthenticationChallenge:completionHandler:



NSURLSessionDelegate
- URLSession:didReceiveChallenge:completionHandler:
NSURLConnectionDelegate
- connection:didReceiveAuthenticationChallenge: (Deprecated)
認証時のデリゲートでは
必要な認証情報を持った NSURLCredential を作って返す
func webView(webView: WKWebView,
didReceiveAuthenticationChallenge challenge:
NSURLAuthenticationChallenge,
completionHandler: (NSURLSessionAuthChallengeDisposition,
NSURLCredential?) -> Void) {
let credential: NSURLCredential
/* credential = ... 適切な内容で NSURLCredential を作る */
completionHandler(.UseCredential, credential)
}
• - initWithUser:password:persistence:

ユーザー名とパスワード
• - initWithTrust:

サーバー証明書
• - initWithIdentity:certificates:persistence:

クライアント証明書
NSURLCredential には3種類のイニシャライザが有り、
必要な認証情報によって使い分ける
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
認証の種類 (NSURLAuthenticationMethod) 毎の
必要になる認証情報は?
4つに分けられますね!
 
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
実際のURLリクエストでは発生しない、カスタマイズ用
let NSURLAuthenticationMethodHTMLForm: String
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
除外
4つに分けられますね!
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
let NSURLAuthenticationMethodClientCertificate: String
let NSURLAuthenticationMethodServerTrust: String
NSURLCredential = 認証情報
どのタイプの認証情報を作ればよいのか?
ユーザー名とパスワード
クライアント証明書
サーバー証明書
completionHandler(
.UseCredential,
NSURLCredential(
user: "niwatako",
password: "password",
persistence: .ForSession
)
)
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
ユーザー名とパスワード
let NSURLAuthenticationMethodDefault: String
let NSURLAuthenticationMethodHTTPBasic: String
let NSURLAuthenticationMethodHTTPDigest: String
let NSURLAuthenticationMethodNegotiate: String
let NSURLAuthenticationMethodNTLM: String
必要に応じてアラートで

ユーザー名とパスワードの
入力を求めるなどする
completionHandler(
.UseCredential,
NSURLCredential(
user: "niwatako",
password: "password",
persistence: .ForSession
)
)
ユーザー名とパスワード
let NSURLAuthenticationMethodClientCertificate: String
クライアント証明書
let NSURLAuthenticationMethodClientCertificate: String
これはまた別の機会に。。。
m(_ _ )m
検証用サーバー作っただけで終わりました
クライアント証明書
let NSURLAuthenticationMethodServerTrust: String
サーバー証明書
let NSURLAuthenticationMethodServerTrust: String
completionHandler(
.PerformDefaultHandling,
nil
)
サーバー証明書
let NSURLAuthenticationMethodServerTrust: String
completionHandler(
.PerformDefaultHandling,
nil
)
OSに任せることが出来る “PerformDefaultHandling”

サーバー証明書に問題がない限りはこれで接続が確立可能
サーバー証明書
let NSURLAuthenticationMethodServerTrust: String
信頼されていない証明証でも

アクセスしたい?

(自己署名証明書を使いたい / IPで接続したい / 有効期限切れ etc)
サーバー証明書
guard let serverTrust = challenge.protectionSpace.serverTrust else {
// 証明書が取得できなかった時はデフォルト処理
completionHandler(.PerformDefaultHandling, nil)
return
}
var result = SecTrustResultType(kSecTrustResultInvalid)
let status: OSStatus = SecTrustEvaluate(serverTrust, &result);
guard
status == noErr &&
result == SecTrustResultType(kSecTrustResultRecoverableTrustFailure)
else {
// 検証自体に失敗した時か、
// 検証結果がkSecTrustResultRecoverableTrustFailure以外は
// デフォルト処理
completionHandler(.PerformDefaultHandling, nil)
return
}
/* kSecTrustResultRecoverableTrustFailure の時は

サーバーの証明書から作った NSURLCredential を返すと強制的に信頼できる */
completionHandler(
.UseCredential,
NSURLCredential(forTrust: serverTrust)
)
let NSURLAuthenticationMethodServerTrust: String
サーバー証明書が認証失敗でも接続を続行
→ここはAlertを出してユーザーに確認したり
→SecTrustEvaluate で自分で証明書を検証
→検証失敗、または正しい証明書、

または強制的な接続続行が不可の時、Defaultに任せる
let NSURLAuthenticationMethodServerTrust: String
let alert = UIAlertController(
title: "Could not Verify Server Identity",
message: "Trust?",
preferredStyle: .Alert
)
alert .addAction(UIAlertAction(title: "Cancel", style: .Default, handler:
{ (UIAlertAction) -> Void in
completionHandler(.CancelAuthenticationChallenge, nil)
}))
alert .addAction(UIAlertAction(title: "Continue", style: .Cancel, handler:
{ (UIAlertAction) -> Void in
completionHandler(.UseCredential, NSURLCredential(forTrust: serverTrust))
/* NSAppTransportSecurity > NSAllowsArbitraryLoads = YES */
}))

self.presentViewController(alert, animated: true, completion: nil)
→接続させない時は CancelAuthenticationChallenge
接続を続行するか確認するアラート
5分ではこのくらいまで  🙇
まだお話すべきこと
• ClientCertificateの使い方は?
• 実際にサーバーを用意してテストしたい
• NSURLSessionのデリゲートと適切な認証処理の箇所
• iOS8とiOS9で気をつけること
#yidev
yidev 第22回勉強会 : ATND
https://atnd.org/events/74803
try! Swift 翌日にお話します!
iOS の通信における認証の種類とその取り扱い

More Related Content

What's hot

ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8Koichiro Matsuoka
 
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験樽八 仲川
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニックinfinite_loop
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニングyoku0825
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころShinsuke Sugaya
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るTakeru Maehara
 
3000社の業務データ絞り込みを支える技術
3000社の業務データ絞り込みを支える技術3000社の業務データ絞り込みを支える技術
3000社の業務データ絞り込みを支える技術Ryo Mitoma
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?takezoe
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについてmoai kids
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史Insight Technology, Inc.
 
Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyTakakiyo Tanaka
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbieDaeMyung Kang
 
AWSで作る分析基盤
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤Yu Otsubo
 
フリーでできるWebセキュリティ(burp編)
フリーでできるWebセキュリティ(burp編)フリーでできるWebセキュリティ(burp編)
フリーでできるWebセキュリティ(burp編)abend_cve_9999_0001
 
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション 【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション 日本マイクロソフト株式会社
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)Takuya Kawabe
 

What's hot (20)

ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
 
3000社の業務データ絞り込みを支える技術
3000社の業務データ絞り込みを支える技術3000社の業務データ絞り込みを支える技術
3000社の業務データ絞り込みを支える技術
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
AWS IoTアーキテクチャパターン
AWS IoTアーキテクチャパターンAWS IoTアーキテクチャパターン
AWS IoTアーキテクチャパターン
 
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
 
Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere Liberty
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 
AWSで作る分析基盤
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤
 
フリーでできるWebセキュリティ(burp編)
フリーでできるWebセキュリティ(burp編)フリーでできるWebセキュリティ(burp編)
フリーでできるWebセキュリティ(burp編)
 
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション 【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
 

Similar to iOS の通信における認証の種類とその取り扱い

AzureActiveDirectoryの認証の話(Azure周りの自動化編)
AzureActiveDirectoryの認証の話(Azure周りの自動化編)AzureActiveDirectoryの認証の話(Azure周りの自動化編)
AzureActiveDirectoryの認証の話(Azure周りの自動化編)Masahiko Ebisuda
 
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編なべ
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Shotaro Suzuki
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-publicAmazon Web Services Japan
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達zaki4649
 
20150221 めとべや東京-プライベートコード共有サービス
20150221 めとべや東京-プライベートコード共有サービス20150221 めとべや東京-プライベートコード共有サービス
20150221 めとべや東京-プライベートコード共有サービスTakayoshi Tanaka
 
Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2Yoshi Nagase
 
Hybrid Azure AD Join 動作の仕組みを徹底解説
Hybrid Azure AD Join 動作の仕組みを徹底解説Hybrid Azure AD Join 動作の仕組みを徹底解説
Hybrid Azure AD Join 動作の仕組みを徹底解説Yusuke Kodama
 
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidationTakayoshi Tanaka
 
Professional SSL/TLS Reading Chapter 14
Professional SSL/TLS Reading Chapter 14Professional SSL/TLS Reading Chapter 14
Professional SSL/TLS Reading Chapter 14Shogo Hayashi
 
msal.js v2を触る
msal.js v2を触るmsal.js v2を触る
msal.js v2を触るDevTakas
 
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所真吾 吉田
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)JPCERT Coordination Center
 
BoF-09 Silverlight and WIF /TechEd Japan 2010
BoF-09 Silverlight and WIF /TechEd Japan 2010BoF-09 Silverlight and WIF /TechEd Japan 2010
BoF-09 Silverlight and WIF /TechEd Japan 2010Naohiro Fujie
 
勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発Kazuki Nakajima
 
S3 Client-Side Encryption by AWS SDK for Java/Ruby
S3 Client-Side Encryption by AWS SDK for Java/RubyS3 Client-Side Encryption by AWS SDK for Java/Ruby
S3 Client-Side Encryption by AWS SDK for Java/Ruby真吾 吉田
 
Aws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそうAws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそうGenta Watanabe
 

Similar to iOS の通信における認証の種類とその取り扱い (20)

AzureActiveDirectoryの認証の話(Azure周りの自動化編)
AzureActiveDirectoryの認証の話(Azure周りの自動化編)AzureActiveDirectoryの認証の話(Azure周りの自動化編)
AzureActiveDirectoryの認証の話(Azure周りの自動化編)
 
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
 
20111203
2011120320111203
20111203
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達
 
20150221 めとべや東京-プライベートコード共有サービス
20150221 めとべや東京-プライベートコード共有サービス20150221 めとべや東京-プライベートコード共有サービス
20150221 めとべや東京-プライベートコード共有サービス
 
Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2
 
Hybrid Azure AD Join 動作の仕組みを徹底解説
Hybrid Azure AD Join 動作の仕組みを徹底解説Hybrid Azure AD Join 動作の仕組みを徹底解説
Hybrid Azure AD Join 動作の仕組みを徹底解説
 
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidation
 
Professional SSL/TLS Reading Chapter 14
Professional SSL/TLS Reading Chapter 14Professional SSL/TLS Reading Chapter 14
Professional SSL/TLS Reading Chapter 14
 
msal.js v2を触る
msal.js v2を触るmsal.js v2を触る
msal.js v2を触る
 
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
 
BoF-09 Silverlight and WIF /TechEd Japan 2010
BoF-09 Silverlight and WIF /TechEd Japan 2010BoF-09 Silverlight and WIF /TechEd Japan 2010
BoF-09 Silverlight and WIF /TechEd Japan 2010
 
20061125
2006112520061125
20061125
 
勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発
 
AWS CLIでAssumeRole
AWS CLIでAssumeRoleAWS CLIでAssumeRole
AWS CLIでAssumeRole
 
S3 Client-Side Encryption by AWS SDK for Java/Ruby
S3 Client-Side Encryption by AWS SDK for Java/RubyS3 Client-Side Encryption by AWS SDK for Java/Ruby
S3 Client-Side Encryption by AWS SDK for Java/Ruby
 
Aws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそうAws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそう
 

iOS の通信における認証の種類とその取り扱い