質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1170閲覧

AppAuth-iOSを使用してcode_challengeとcode_verifierを使用してPKCEを実装するやりかた

koikuti

総合スコア50

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2022/06/19 02:16

編集2022/06/19 13:19

大変お恥ずかしいのですが、表題の通りのことを実現する必要があるのですが、
AppAuth-iOSライブラリのどのメソッドをどう使用すればいいのか皆目見当がつかず、
参考になるページや、ソース例などご教示いただきたく思います。

Swiftが全くの初心者かつセキュリティ周りの知識もほぼ持ち合わせて居ないため、
そもそも、PKCEをに対する理解が浅いことも見当がつかない原因かと考えては居ます。

AppAuth-Androidにおいてであれば、
CodeVerifierUtil.generateRandomCodeVerifier
CodeVerifierUtil.deriveCodeVerifierChallenge
などを使用するのかなとあたりをつけたのですが(あっているか分かりませんが)iOS向けのものだと、
メソッド名などから当たりをつけることもできませんでした。

非常に他力本願というか、まるっと問題を丸投げしてしまって申し訳ないのですが、
よろしくおねがいします。

※ 追記
一応Readmeに目は通しているのですが、
Swift初心者だから、英語がほぼ読めないから、などなどの原因が重なっている上、
PKCE含め私の全体的なIT知識不足もあり、どこから質問すればよいか、どこから手を付ければよいか、
時間的余裕の無さも相まって、内容が理解できず今回の質問に至りました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

参考になるページや、ソース例などご教示いただきたく思います。

すみません、実際に使ったことはないのですが・・
GitHubのREADMEにフローなどが記載されているみたいでした。

Auth Flow
https://github.com/openid/AppAuth-iOS/blob/6f48321e04ca3ad6417717246f085dc73d307369/README.md#auth-flow

AppAuthの設定をして(authorizationEndpointなど)、
UIApplicationDelegateに準拠するようにして、
認証の状態を保存するためのプロパティ(OIDAuthState型)を実装して、
それから、

Then, initiate the authorization request. By using the authStateByPresentingAuthorizationRequest convenience method, the token exchange will be performed automatically, and everything will be protected with PKCE (if the server supports it). AppAuth also lets you perform these requests manually. See the authNoCodeExchange method in the included Example app for a demonstration:
その後、認証リクエストを開始します。authStateByPresentingAuthorizationRequest コンビニエンスメソッドを使用すると、トークン交換が自動的に行われ、すべてがPKCEで保護されます (サーバーがサポートしている場合)。AppAuth では、これらのリクエストを手動で実行することもできます。付属のExampleアプリのauthNoCodeExchangeメソッドで、そのデモをご覧ください。
https://github.com/openid/AppAuth-iOS/blob/6f48321e04ca3ad6417717246f085dc73d307369/README.md#authorizing-ios

OIDAuthorizationRequestのインスタンスを生成して、
Swiftの場合は
OIDAuthState.authState(byPresenting: request, presenting: self) { authState, error in ... }
のような感じで記述するとトークン交換が自動的に行われるみたいです。

Exampleも見てみると良いかもしれません。
https://github.com/openid/AppAuth-iOS/blob/master/Examples/Example-iOS_Swift-Carthage/Source/AppAuthExampleViewController.swift#L370

PKCEについて次のリンクも見てみました。
https://qiita.com/TakahikoKawasaki/items/00f333c72ed96c4da659


コメントありがとうございます。
追記です。

先に書いておくべきでしたが、一応Readmeに目は通しているのですが、

そうだったのですね、あまり知らないのに回答してしまってすみません・・

Exampleは関係なさそうなコードも含まれてしまっているみたいですが、
Exampleのリンク先の370行目、
func doAuthWithAutoCodeExchange(configuration: OIDServiceConfiguration, clientID: String, clientSecret: String?) {
このあたり(呼び出しもなども)を見てみると良いかもしれません。

READMEを見る感じでは、
「トークン交換が自動的に行われ」と記載されていますので、
code_challengeとcode_verifierなどを意識しなくても
OIDAuthState.authState(byPresenting:presenting:)メソッドに任せておくだけで大丈夫なのかなと思いました。

投稿2022/06/19 03:40

編集2022/06/19 04:10
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koikuti

2022/06/19 03:51

回答ありがとうございます。 先に書いておくべきでしたが、一応Readmeに目は通しているのですが、 Swift初心者だから、英語がほぼ読めないから、などなどの原因が重なっている上、 PKCE含め私の全体的なIT知識不足もあり、どこから質問すればよいか、どこから手を付ければよいか、 時間的余裕の無さも相まって、内容が理解できず今回の質問に至りました。 とりあえず、ご教示頂いた、Example, Qiita記事を参考にしてみます。
koikuti

2022/06/19 04:19 編集

回答追記ありがとうございます。 > コメントありがとうございます。 > 追記です。 >> 先に書いておくべきでしたが、一応Readmeに目は通しているのですが、 > そうだったのですね、あまり知らないのに回答してしまってすみません・・ いえいえ、こちらが焦りのあまり自身の背景を書き忘れていただけですので、申し訳ありません。 > 「トークン交換が自動的に行われ」と記載されていますので、 > code_challengeとcode_verifierなどを意識しなくても > OIDAuthState.authState(byPresenting:presenting:)メソッドに任せておくだけで大丈夫なのかなと思いました。 なるほど、Androidの場合と随分と違うようで、困惑していたのですが、そういうことなのですね。 (Androidだと、自身でchallenge, verifierを作成しなきゃいけない用に見えていたもので。 この辺も理解しているわけではなく、なんとなくそうっぽいなっぐらいの理解なのも困惑のもとかもですが...)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問