iosアプリからAzure(AD)で構築されたサーバー(SSOあり)環境へのアクセス
現在、swiftを用いてローカル環境(PCーwifi-iPhone)でhttp通信のやり取りを行うiosアプリを開発しています。
この度、ローカルの環境からサーバー部分をAzureのサーバー環境に移行してSSO(シングルサインオン)機能をつけて運用することになりました。
現状のアプリの通信の仕様だとAzureの環境へ移行するとおそらく認証部分で通信が弾かれてしまい
サーバとiPhone間のデータのやり取りが出来なくなると予測されます。
現状の通信方法を流用してiosアプリでSSOが設定されたAzureサーバにアクセスする方法が分かりましたらご教授いただきたいです。
現状iosアプリの通信サンプル
class ViewController: UIViewController { @IBAction func sendbtn(_ sender: Any) { // ボタンが押されたら var responseStatusCode:String = "" if let path1 = path1txf.text, let path2 = path2txf.text, let path3 = path3txf.text { let strUrl = path1 + path2 + path3 //例:http://xxx.xxx.xxx.xxx/yyyy/zzz.php let myUrl = URL(string:strUrl)! let req = NSMutableURLRequest(url: myUrl) req.cachePolicy = .reloadIgnoringLocalCacheData req.httpMethod = "GET" let myHttpSession = HttpClientImpl() let (data, response, error) = myHttpSession.execute(request: req as URLRequest) if let response = response as? HTTPURLResponse { responseStatusCode = String(response.statusCode) } else { print(error?.code) } if data != nil { // 受け取ったデータに対する処理 let strData: String? = String(data: data! as Data, encoding: .utf8) if let strData = strData{ //print("strData:" + strData) if(strData != ""){ // 戻り値あり textviewにそのまま表示 returntxv.text = strData } else { returntxv.text = responseStatusCode + ":" + "戻り値が空" } } else { returntxv.text = responseStatusCode + ":" + "不明な戻り値1" } } else { returntxv.text = responseStatusCode + ":" + "不明な戻り値2" } } } } let _HTTP_TIMEOUT:TimeInterval = 30 public class HttpClientImpl { private let session: URLSession public init(config: URLSessionConfiguration? = nil) { config?.timeoutIntervalForRequest = _HTTP_TIMEOUT config?.requestCachePolicy = NSURLRequest.CachePolicy.reloadIgnoringLocalCacheData self.session = config.map { URLSession(configuration: $0) } ?? URLSession.shared } public func execute(request: URLRequest) -> (NSData?, URLResponse?, NSError?) { var d: NSData? = nil var r: URLResponse? = nil var e: NSError? = nil let semaphore = DispatchSemaphore(value: 0) session .dataTask(with: request) { (data, response, error) -> Void in d = data as NSData? r = response e = error as NSError? semaphore.signal() } .resume() _ = semaphore.wait(timeout: DispatchTime.distantFuture) return (d, r, e) } var sd:NSData? = nil var sr: URLResponse? = nil var se: NSError? = nil public func execute2(request: URLRequest) -> (NSData?, URLResponse?, NSError?) { let semaphore = DispatchSemaphore(value: 0) session .dataTask(with: request) { (data, response, error) -> Void in self.sd = data as NSData? self.sr = response self.se = error as NSError? semaphore.signal() } .resume() _ = semaphore.wait(timeout: DispatchTime.distantFuture) return (sd, sr, se) } }
試したこと
・上記の通信でSSOの設定がないAzureサーバからリターン値を取れることは確認ずみ
・https://docs.microsoft.com/ja-jp/graph/tutorials/ios-swift
を参照に
iosアプリがサインインした状態であれば通信が通るのかと思い「Add Azure AD authentication」の
Add sign-in and sign-outの部分まで作ってみたのですが、
(テスト用のサーバー環境がまだ出来ていないのでAuthSettings.plist.のAppIdは未設定です。)
アプリのサインイン機能と上記サンプルの通信が通るのは別問題な気がしてきており、
通信を通すための情報をいただきたいです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/23 01:08