14
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOSアプリでのOAuth認証で、ASWebAuthenticationSessionを使用する

Last updated at Posted at 2019-06-01

はじめに

iOSアプリにログイン機能を入れる場合、「Google」や「Github」、「Facebook」等でのログインを用いたOauth認証を使用することがあるかと思います。
このときに「OAuthSwift」のライブラリーを使用する方法もあるかと思いますが、「ASWebAuthenticationSession」を使用する方法を紹介します。

※ iOS11以上では、Cookie等のデータがSafariとは共有できなくなりました。
 iOS11では「SFAuthenticationSession」が新しく提供されましたが、iOS12ではdeprecatedとなり「ASWebAuthenticationSession」に置き換わりました。

実装方法

  1. URLスキームを設定します
    [info] - [URL Types]

    • [identifire] Bundle Identifier を入れるのが一般的ですが、一意になれば何でも良いようです
    • [URL Schemes] URLスキーム
  2. アプリケーションを登録します
    (Qiitaの場合:Qiitaにログインして、下記のようにアプリケーションを登録します)
    [設定] - [アプリケーション] - [アプリケーションを登録する]
    ※ リダイレクト先のURLには、アプリのURLスキーム://hogehogeのように設定をします。

  3. コード
    例として、取得した認可コードを表示しています。

import UIKit
import AuthenticationServices

class ViewController: UIViewController {

    var session: ASWebAuthenticationSession?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        let url = URL(string: "https://qiita.com/api/v2/oauth/authorize?<発行されたClient ID>&scope=<要求するスコープ>&state=<認可後にリダイレクトするURLのクエリに含める値>")!
            self.session = ASWebAuthenticationSession(url: url, callbackURLScheme: nil) { url, error in
                print(url) // <登録したリダイレクト先のURL>?token=XXXXXXXXXXXXXX
            }
        session?.start()
    }
}

まとめ

iOSでOAuthを使用したログインを実装する場合、「OAuthSwift」のライブラリーを使用する方法があります。しかし「ASWebAuthenticationSession」での実装もシンプルですし、ライブラリー依存がなくなるので、こちらの方が良いかと思います。

今回紹介した方法で「認可コード」を取得できました。
この「認可コード」を「クライアントID」「クライアントシークレット」と一緒に、トークン発行のエンドポイントにリクエストを投げれば、「アクセストークン」が取得できます。

Oauth2のフローを理解するには、下記が参考になりました。
https://qiita.com/TakahikoKawasaki/items/200951e5b5929f840a1f

参考

https://qiita.com/api/v2/docs
https://blog.fenrir-inc.com/jp/2017/11/sfauthenticationsession.html
https://qiita.com/koogawa/items/55a7405c2c323a8f413a
https://qiita.com/TakahikoKawasaki/items/200951e5b5929f840a1f

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?