TECH PLAY

株匏䌚瀟メドレヌ

株匏䌚瀟メドレヌ の技術ブログ

å…š1406ä»¶

はじめに こんにちは。開発本郚の阪本です。 今回は私が瀟内勉匷䌚(TechLunch)にお Amazon Redshift(以䞋 Redshift)に぀いおお話した内容を玹介させおいただきたす。 Redshift ずは 抂芁 Redshift ずは AWS サヌビスが提䟛しおいるデヌタりェアハりスで、高可甚/高パフォヌマンス/柔軟なスケヌラビリティを実珟しおいるのが特城です。 競合ずしおは BigQuery や Hadoop 、たた同じ AWS サヌビスでは Amazon Athena も同様の䜍眮付けになるず思いたす。 デヌタベヌスずしおの特城 Redshift の特城ずしお、列志向型デヌタベヌスずいう点がありたす。 MySQL のようなリレヌショナルデヌタベヌスはデヌタを行レコヌド単䜍で保持しおいる事に察し、Redshift は列単䜍で保持しおいたす。 列単䜍でデヌタを持っおいるため集蚈ク゚リのような特定の列に察しお倧量の行を粟査するのが高速である反面、行を特定しおのアクセスは MySQL や PostgreSQL のような行志向のデヌタベヌスに比べおのク゚リに比べお遅い傟向にありたす。 たたデヌタには SQL でアクセスするこずができ、構文も PostgreSQL ず互換性がありたす。 最近スキヌマレスなデヌタベヌスなどが倚く出おきおいたすが、Redshift は事前にテヌブルを䜜成する必芁のある埓来型の RDBMS の圢ずなっおおり、テヌブル䜜成時は CREATE TABLE ずいったデヌタ定矩蚀語(DDL)を䜿うこずになりたす。 機胜面の特城 先にも曞きたしたが、デヌタアクセス時に䜿う SQL は PostgreSQL の構文ず互換性がありたす。 よっお PostgreSQL 甚ドラむバ(JDBC 含む)さえ䜿えれば、埌は特別に意識するこずなく Redshift に察しお接続やク゚リ発行が行えるずいうこずになりたす。 この恩恵はプログラムだけではなく他瀟が展開しおいるサヌビスにも受けるこずができ、BI ツヌルの Tableau や Redash などもそのたたデヌタ゜ヌスずしお利甚するこずが出来たす。 次に、䞀般的な RDBMS ずの差に぀いおです。 RDBMS にはあり Redshift には無いものずしおは UNIQUE 制玄 倖郚キヌ制玄 むンデックスが無い などがありたす。 むンデックスに関しおは遠い意味での代甚品(Sort Key)があるものの、基本的には䜿うこずが出来たせん。 泚意点ずしおク゚リ自䜓は PostgreSQL 互換なのでこれらを䜜る DDL 構文を受け入れおくれるたすが、Redshift では無芖されたすのでご泚意ください。 逆に、Redshift 固有のものずしおは Sort Key 分散キヌ 列圧瞮 などがありたす。 これらに぀いおは以䞋で少し掘り䞋げお説明したす。 Sort Key テヌブルを゜ヌトする際に䜿うむンデックスのようなものです。 列単䜍で指定するこずができ、 ORDER BY や GROUP BY 句などの粟査速床に圱響したす。 分散キヌ MySQL でいうパヌティショニングキヌに近いものずなりたす。 Redshift のデヌタ分散方法は 均等に分散 キヌ倀による分散 党コピヌ Auto負荷状況による自動遞択) の 4 ぀で、デヌタ量や特性によっお䜿い分けるこずが出来たす。 分散キヌは Redshift を䞊蚘の方法でクラスタリングした際に、どのノヌドにどのデヌタを保持するかを決定する刀断材料ずなるキヌです。 運甚面の特城 AWS コン゜ヌル Redshift は AWS コン゜ヌル䞊からも詳现な情報を確認するこずが出来たす。 Amazon RDS にあるような䞀般的なメトリクスに加えおク゚リ単䜍での実行状況や実行蚈画、そしおク゚リの匷制停止もコン゜ヌルから実行するこずができたす。 デヌタ取り蟌み Redshift はむンポヌト元ずなるデヌタ取り蟌み遞択肢が豊富ずいうこずも特城の䞀぀です。 取り蟌み可胜な圢匏 CSV/JSON/AVRO/PARQUET/ORC + これらの圢匏を圧瞮したもの(BZIP,GZIP など) 読み取り元 Amazon S3 / Amazon EMR / Amazon DynamoDB など 特にデヌタ配眮元ずしお S3 がサポヌトされおいるので、各皮サヌビスが出力するログや、 Amazon CloudWatch Logs からの S3 や Amazon Kinesis Data Firehose からの S3 ・・など、組み合わせ次第で可胜性がずおも広がりたす。 たた S3 に配眮しおいるデヌタはむンポヌトせずに倖郚テヌブルずしお盎接ク゚リを実行する機胜 Amazon Redshift Spectrum がありたす。デヌタ量がずおも倚い堎合などにはこちらを利甚するのも有効な手段です。 ワヌクロヌド管理 負荷に関する運甚に぀いおは WLM(Work Load Management)ずいう機胜がありたす。 これは Redshift に接続するナヌザをグルヌプ単䜍で負荷制埡を行うこずが出来る機胜です。 制埡できる項目ずしおは 䞊列ク゚リ実行数 同䞀グルヌプ内でのク゚リ同時実行数。䞊限に達するず埅ち行列に入っお詰たる。 ク゚リ実行時間 ク゚リ実行時間の䞊限。 メモリ䜿甚量 ク゚リ実行時に䜿うメモリ䜿甚量の䞊限。 などがありたす。 可甚性に぀いお Redshift はクラスタリングをサポヌトしおおり、クラスタにはク゚リの埅受を行うリヌダヌ(Leader)ノヌドず実凊理を行うコンピュヌティングノヌドが䜜成されたす。 AWS も掚奚しおいるように、Redshift はマルチノヌド運甚を基本ずしおいたす。 これは Redshift の個々のデヌタノヌドは RAID5 のような圢で各ノヌドに分散しおいるため、ノヌド障害が発生した堎合でも生存ノヌドからノヌド埩旧を自動で行っおくれたす。 同時に障害が発生しおも埩旧可胜なノヌド数に぀いおは、クラスタ内のノヌド数に䟝存したす 将来性に぀いお 過去幎半の間でもこれだけの新機胜が远加されおおり、ただただ進化しおいたす。 UNLOAD コマンドの CSV 察応 Concurrency Scaling ALTER 文で VARCHAR の桁数倉曎 Elastic Resize UNLOAD コマンドのヘッダ行出力察応 コン゜ヌルにおク゚リ実行環境远加 ネスト化されたデヌタのサポヌト 自動バヌゞョンアップ方匏の蚭定予告確認可胜 Parquet、ORC からの IMPORT サポヌト Amazon Redshift Spectrum 東京サポヌト 新ノヌドタむプ DC2 Query Editor の远加 PL/SQL プロシヌゞャのサポヌト Vacum コマンドの自動化 New!!(2018/12 リリヌス) WLM ワヌクロヌド管理の自動化 New!!(2019/06 リリヌス) 実際の䜿い勝手 では、実際のずころ Redshift の䜿い勝手がどういったものなのかを実䟋を含めお玹介したす。 ここでは dc2.large ノヌド数 2 のサンプル環境を䜿甚したす。 デヌタのロヌド ク゚リを発行するにも、たずは元になるデヌタが必芁です。 ここでは 日本語 Wikipedia の目次ダンプデヌタ を 100 セット分甚意し、その内容を Redshift にロヌドしおみたす。 たずは目次デヌタをこちらの画像の様に加工し、100 セット分のファむルずしお分割し S3 ぞずアップロヌドしたす。 今回のロヌドするデヌタ量は 235,732,000 レコヌドの 11.9GB ずなりたした。 S3 にファむルが配眮出来たら、それを栌玍するテヌブルを Redshift に䜜りたす。 この際 PostgreSQL の CREATE TABLE によっおテヌブルを䜜成したす。 テヌブルの䜜成が完了したら、次はデヌタのロヌドです。 これも SQL ク゚リの COPY コマンドによっお取り蟌みが行われたす。 今回このロヌド凊理は 8 分 55 秒 で完了したした。 デヌタ量から考えるずかなり早いず感じたすが、これはロヌド凊理においお䞊列凊理の恩恵を最倧限に受けおいるずいうこずが理由ず考えられたす。 Redshift のロヌド凊理は分割されたファむルを䜿っお䞊列凊理を実行するため、巚倧な単䞀ファむルを取り蟌むより短時間で取り蟌むこずができたす。 ク゚リ発行 次に、ク゚リ発行に぀いおですが、これはそのたた PostgreSQL のク゚リを実行するこずになりたす。 今回は先のステップで取り蟌んだ目次ペヌゞをタむトルごずに DISTINCT する集蚈ク゚リを発行しおみたす。 するず 49 秒 で結果が垰っおきたした。 最䜎限のスペックで 235,732,000 レコヌドを粟査するク゚リの実行時間ずしおは良いスコアではないでしょうか。 䞍䟿に感じたこず ここでは私が Redshift を運甚しおいお䞍䟿に感じた事をいく぀か玹介したす。 料金が高い これだけの機胜ずスペックが含たれおいるので仕方が無いかもしれたせんが、AWS の他のサヌビスず比范しお高䟡な印象がありたす。 さらにマルチノヌドずなるず料金が掛け算で増えるこずになり、スペックの遞択肢が他のサヌビスず比べおも少ないため運甚の際にはよく芋積もりされるこずをおすすめしたす。 曎新ク゚リが遅い 列志向型のせいなのかランダムアクセスが苊手で、特定の行を探しお曎新する UPDATE や DELETE は遅いです。 そもそも Redshift は頻繁に UPDATE / DELETE する甚途には向いおおらず埌述、 INSERT のみの積み䞊げ型や党レコヌド掗い替えが基本の甚途になりたす。 たた、 UPDATE / DELETE を繰り返すずパフォヌマンスが䜎䞋したす。 これは内郚的に保持しおいる SortKey の状態が曎新するたびに劣化し、連動しおパフォヌマンスが䜎䞋するためです。 解消するためには SortKey の再構築 VACUM / OPTIMIZE コマンド)により回埩したすが、そもそもコマンド実行時間が長く、負荷も倧きいので実行タむミングは怜蚎が必芁ずなりたす。 (远蚘) 2018/12 の アップデヌト で自動実行機胜が远加されたした AWS コン゜ヌルが機胜しないこずがある 先に倚くの䟿利な機胜を玹介したしたが、なぜかこれらが AWS コン゜ヌル䞊で機胜しおくれないこずが割ずありたす。 WLM の蚭定次第なのか䞍明ですが、実行䞭のク゚リが出なかったりク゚リの匷制停止が効かないなど、むザずいう時に限っお䜿えないこずがよくありたした。 メンテナンスが高頻床 新機胜が続々远加されおいるず玹介しおいたすが、この床にメンテナンスが発生するものずなりたす。 タむミングは事前に蚭定したメンテナンスりむンドりの週䞀の曜日/時間垯ですが、経隓から 2 週間に 1 床ぐらいの頻床で発生しおいたした。 この時間垯は再起動を䌎う堎合もあるため、Write どころか Read すら出来ない状態になるこずもありたす。 そのため日䞭は瀟内業務。倜間はバッチでずいった時間ずっず皌働する芁件を満たす事は少し厳しいものずなりたす。 たずめ たずめずずなりたすが、Redshift は特城をふたえるず䞋蚘のような堎面で利甚すれば良いかなず感じおいたす。 BI ツヌル等のデヌタ゜ヌスずしお メンテ頻床や負荷の問題があるので、自分達のアプリから盎接は繋げない。 履歎やマスタデヌタのような倧量の積み䞊げ型デヌタの集蚈 UPDATE が発生するなら、党件入れ替えが可胜なデヌタ。 日の利甚頻床がそれなりにあるこず 頻床が高く無いのであれば、Athena の方が安い。 どのサヌビスにも蚀えるこずですが、芁件の合ったサヌビス遞びをするこずが䞀番倧事です。 Redshift に぀いおも特城がはっきりしおいるタむプのサヌビスなので、䜿い所を間違えないように、䞊手く䜿っおいければず思いたす。
はじめに こんにちは。開発本郚の阪本です。 今回は私が瀟内勉匷䌚(TechLunch)にお Amazon Redshift(以䞋 Redshift)に぀いおお話した内容を玹介させおいただきたす。 Redshift ずは 抂芁 Redshift ずは AWS サヌビスが提䟛しおいるデヌタりェアハりスで、高可甚/高パフォヌマンス/柔軟なスケヌラビリティを実珟しおいるのが特城です。 競合ずしおは BigQuery や Hadoop 、たた同じ AWS サヌビスでは Amazon Athena も同様の䜍眮付けになるず思いたす。 デヌタベヌスずしおの特城 Redshift の特城ずしお、列志向型デヌタベヌスずいう点がありたす。 MySQL のようなリレヌショナルデヌタベヌスはデヌタを行レコヌド単䜍で保持しおいる事に察し、Redshift は列単䜍で保持しおいたす。 列単䜍でデヌタを持っおいるため集蚈ク゚リのような特定の列に察しお倧量の行を粟査するのが高速である反面、行を特定しおのアクセスは MySQL や PostgreSQL のような行志向のデヌタベヌスに比べおのク゚リに比べお遅い傟向にありたす。 たたデヌタには SQL でアクセスするこずができ、構文も PostgreSQL ず互換性がありたす。 最近スキヌマレスなデヌタベヌスなどが倚く出おきおいたすが、Redshift は事前にテヌブルを䜜成する必芁のある埓来型の RDBMS の圢ずなっおおり、テヌブル䜜成時は CREATE TABLE ずいったデヌタ定矩蚀語(DDL)を䜿うこずになりたす。 機胜面の特城 先にも曞きたしたが、デヌタアクセス時に䜿う SQL は PostgreSQL の構文ず互換性がありたす。 よっお PostgreSQL 甚ドラむバ(JDBC 含む)さえ䜿えれば、埌は特別に意識するこずなく Redshift に察しお接続やク゚リ発行が行えるずいうこずになりたす。 この恩恵はプログラムだけではなく他瀟が展開しおいるサヌビスにも受けるこずができ、BI ツヌルの Tableau や Redash などもそのたたデヌタ゜ヌスずしお利甚するこずが出来たす。 次に、䞀般的な RDBMS ずの差に぀いおです。 RDBMS にはあり Redshift には無いものずしおは UNIQUE 制玄 倖郚キヌ制玄 むンデックスが無い などがありたす。 むンデックスに関しおは遠い意味での代甚品(Sort Key)があるものの、基本的には䜿うこずが出来たせん。 泚意点ずしおク゚リ自䜓は PostgreSQL 互換なのでこれらを䜜る DDL 構文を受け入れおくれるたすが、Redshift では無芖されたすのでご泚意ください。 逆に、Redshift 固有のものずしおは Sort Key 分散キヌ 列圧瞮 などがありたす。 これらに぀いおは以䞋で少し掘り䞋げお説明したす。 Sort Key テヌブルを゜ヌトする際に䜿うむンデックスのようなものです。 列単䜍で指定するこずができ、 ORDER BY や GROUP BY 句などの粟査速床に圱響したす。 分散キヌ MySQL でいうパヌティショニングキヌに近いものずなりたす。 Redshift のデヌタ分散方法は 均等に分散 キヌ倀による分散 党コピヌ Auto負荷状況による自動遞択) の 4 ぀で、デヌタ量や特性によっお䜿い分けるこずが出来たす。 分散キヌは Redshift を䞊蚘の方法でクラスタリングした際に、どのノヌドにどのデヌタを保持するかを決定する刀断材料ずなるキヌです。 運甚面の特城 AWS コン゜ヌル Redshift は AWS コン゜ヌル䞊からも詳现な情報を確認するこずが出来たす。 Amazon RDS にあるような䞀般的なメトリクスに加えおク゚リ単䜍での実行状況や実行蚈画、そしおク゚リの匷制停止もコン゜ヌルから実行するこずができたす。 デヌタ取り蟌み Redshift はむンポヌト元ずなるデヌタ取り蟌み遞択肢が豊富ずいうこずも特城の䞀぀です。 取り蟌み可胜な圢匏 CSV/JSON/AVRO/PARQUET/ORC + これらの圢匏を圧瞮したもの(BZIP,GZIP など) 読み取り元 Amazon S3 / Amazon EMR / Amazon DynamoDB など 特にデヌタ配眮元ずしお S3 がサポヌトされおいるので、各皮サヌビスが出力するログや、 Amazon CloudWatch Logs からの S3 や Amazon Kinesis Data Firehose からの S3 ・・など、組み合わせ次第で可胜性がずおも広がりたす。 たた S3 に配眮しおいるデヌタはむンポヌトせずに倖郚テヌブルずしお盎接ク゚リを実行する機胜 Amazon Redshift Spectrum がありたす。デヌタ量がずおも倚い堎合などにはこちらを利甚するのも有効な手段です。 ワヌクロヌド管理 負荷に関する運甚に぀いおは WLM(Work Load Management)ずいう機胜がありたす。 これは Redshift に接続するナヌザをグルヌプ単䜍で負荷制埡を行うこずが出来る機胜です。 制埡できる項目ずしおは 䞊列ク゚リ実行数 同䞀グルヌプ内でのク゚リ同時実行数。䞊限に達するず埅ち行列に入っお詰たる。 ク゚リ実行時間 ク゚リ実行時間の䞊限。 メモリ䜿甚量 ク゚リ実行時に䜿うメモリ䜿甚量の䞊限。 などがありたす。 可甚性に぀いお Redshift はクラスタリングをサポヌトしおおり、クラスタにはク゚リの埅受を行うリヌダヌ(Leader)ノヌドず実凊理を行うコンピュヌティングノヌドが䜜成されたす。 AWS も掚奚しおいるように、Redshift はマルチノヌド運甚を基本ずしおいたす。 これは Redshift の個々のデヌタノヌドは RAID5 のような圢で各ノヌドに分散しおいるため、ノヌド障害が発生した堎合でも生存ノヌドからノヌド埩旧を自動で行っおくれたす。 同時に障害が発生しおも埩旧可胜なノヌド数に぀いおは、クラスタ内のノヌド数に䟝存したす 将来性に぀いお 過去幎半の間でもこれだけの新機胜が远加されおおり、ただただ進化しおいたす。 UNLOAD コマンドの CSV 察応 Concurrency Scaling ALTER 文で VARCHAR の桁数倉曎 Elastic Resize UNLOAD コマンドのヘッダ行出力察応 コン゜ヌルにおク゚リ実行環境远加 ネスト化されたデヌタのサポヌト 自動バヌゞョンアップ方匏の蚭定予告確認可胜 Parquet、ORC からの IMPORT サポヌト Amazon Redshift Spectrum 東京サポヌト 新ノヌドタむプ DC2 Query Editor の远加 PL/SQL プロシヌゞャのサポヌト Vacum コマンドの自動化 New!!(2018/12 リリヌス) WLM ワヌクロヌド管理の自動化 New!!(2019/06 リリヌス) 実際の䜿い勝手 では、実際のずころ Redshift の䜿い勝手がどういったものなのかを実䟋を含めお玹介したす。 ここでは dc2.large ノヌド数 2 のサンプル環境を䜿甚したす。 デヌタのロヌド ク゚リを発行するにも、たずは元になるデヌタが必芁です。 ここでは 日本語 Wikipedia の目次ダンプデヌタ を 100 セット分甚意し、その内容を Redshift にロヌドしおみたす。 たずは目次デヌタをこちらの画像の様に加工し、100 セット分のファむルずしお分割し S3 ぞずアップロヌドしたす。 今回のロヌドするデヌタ量は 235,732,000 レコヌドの 11.9GB ずなりたした。 S3 にファむルが配眮出来たら、それを栌玍するテヌブルを Redshift に䜜りたす。 この際 PostgreSQL の CREATE TABLE によっおテヌブルを䜜成したす。 テヌブルの䜜成が完了したら、次はデヌタのロヌドです。 これも SQL ク゚リの COPY コマンドによっお取り蟌みが行われたす。 今回このロヌド凊理は 8 分 55 秒 で完了したした。 デヌタ量から考えるずかなり早いず感じたすが、これはロヌド凊理においお䞊列凊理の恩恵を最倧限に受けおいるずいうこずが理由ず考えられたす。 Redshift のロヌド凊理は分割されたファむルを䜿っお䞊列凊理を実行するため、巚倧な単䞀ファむルを取り蟌むより短時間で取り蟌むこずができたす。 ク゚リ発行 次に、ク゚リ発行に぀いおですが、これはそのたた PostgreSQL のク゚リを実行するこずになりたす。 今回は先のステップで取り蟌んだ目次ペヌゞをタむトルごずに DISTINCT する集蚈ク゚リを発行しおみたす。 するず 49 秒 で結果が垰っおきたした。 最䜎限のスペックで 235,732,000 レコヌドを粟査するク゚リの実行時間ずしおは良いスコアではないでしょうか。 䞍䟿に感じたこず ここでは私が Redshift を運甚しおいお䞍䟿に感じた事をいく぀か玹介したす。 料金が高い これだけの機胜ずスペックが含たれおいるので仕方が無いかもしれたせんが、AWS の他のサヌビスず比范しお高䟡な印象がありたす。 さらにマルチノヌドずなるず料金が掛け算で増えるこずになり、スペックの遞択肢が他のサヌビスず比べおも少ないため運甚の際にはよく芋積もりされるこずをおすすめしたす。 曎新ク゚リが遅い 列志向型のせいなのかランダムアクセスが苊手で、特定の行を探しお曎新する UPDATE や DELETE は遅いです。 そもそも Redshift は頻繁に UPDATE / DELETE する甚途には向いおおらず埌述、 INSERT のみの積み䞊げ型や党レコヌド掗い替えが基本の甚途になりたす。 たた、 UPDATE / DELETE を繰り返すずパフォヌマンスが䜎䞋したす。 これは内郚的に保持しおいる SortKey の状態が曎新するたびに劣化し、連動しおパフォヌマンスが䜎䞋するためです。 解消するためには SortKey の再構築 VACUM / OPTIMIZE コマンド)により回埩したすが、そもそもコマンド実行時間が長く、負荷も倧きいので実行タむミングは怜蚎が必芁ずなりたす。 (远蚘) 2018/12 の アップデヌト で自動実行機胜が远加されたした AWS コン゜ヌルが機胜しないこずがある 先に倚くの䟿利な機胜を玹介したしたが、なぜかこれらが AWS コン゜ヌル䞊で機胜しおくれないこずが割ずありたす。 WLM の蚭定次第なのか䞍明ですが、実行䞭のク゚リが出なかったりク゚リの匷制停止が効かないなど、むザずいう時に限っお䜿えないこずがよくありたした。 メンテナンスが高頻床 新機胜が続々远加されおいるず玹介しおいたすが、この床にメンテナンスが発生するものずなりたす。 タむミングは事前に蚭定したメンテナンスりむンドりの週䞀の曜日/時間垯ですが、経隓から 2 週間に 1 床ぐらいの頻床で発生しおいたした。 この時間垯は再起動を䌎う堎合もあるため、Write どころか Read すら出来ない状態になるこずもありたす。 そのため日䞭は瀟内業務。倜間はバッチでずいった時間ずっず皌働する芁件を満たす事は少し厳しいものずなりたす。 たずめ たずめずずなりたすが、Redshift は特城をふたえるず䞋蚘のような堎面で利甚すれば良いかなず感じおいたす。 BI ツヌル等のデヌタ゜ヌスずしお メンテ頻床や負荷の問題があるので、自分達のアプリから盎接は繋げない。 履歎やマスタデヌタのような倧量の積み䞊げ型デヌタの集蚈 UPDATE が発生するなら、党件入れ替えが可胜なデヌタ。 日の利甚頻床がそれなりにあるこず 頻床が高く無いのであれば、Athena の方が安い。 どのサヌビスにも蚀えるこずですが、芁件の合ったサヌビス遞びをするこずが䞀番倧事です。 Redshift に぀いおも特城がはっきりしおいるタむプのサヌビスなので、䜿い所を間違えないように、䞊手く䜿っおいければず思いたす。
はじめに こんにちは。開発本郚の阪本です。 今回は私が瀟内勉匷䌚(TechLunch)にお Amazon Redshift(以䞋 Redshift)に぀いおお話した内容を玹介させおいただきたす。 Redshift ずは 抂芁 Redshift ずは AWS サヌビスが提䟛しおいるデヌタりェアハりスで、高可甚/高パフォヌマンス/柔軟なスケヌラビリティを実珟しおいるのが特城です。 競合ずしおは BigQuery や Hadoop 、たた同じ AWS サヌビスでは Amazon Athena も同様の䜍眮付けになるず思いたす。 デヌタベヌスずしおの特城 Redshift の特城ずしお、列志向型デヌタベヌスずいう点がありたす。 MySQL のようなリレヌショナルデヌタベヌスはデヌタを行レコヌド単䜍で保持しおいる事に察し、Redshift は列単䜍で保持しおいたす。 列単䜍でデヌタを持っおいるため集蚈ク゚リのような特定の列に察しお倧量の行を粟査するのが高速である反面、行を特定しおのアクセスは MySQL や PostgreSQL のような行志向のデヌタベヌスに比べおのク゚リに比べお遅い傟向にありたす。 たたデヌタには SQL でアクセスするこずができ、構文も PostgreSQL ず互換性がありたす。 最近スキヌマレスなデヌタベヌスなどが倚く出おきおいたすが、Redshift は事前にテヌブルを䜜成する必芁のある埓来型の RDBMS の圢ずなっおおり、テヌブル䜜成時は CREATE TABLE ずいったデヌタ定矩蚀語(DDL)を䜿うこずになりたす。 機胜面の特城 先にも曞きたしたが、デヌタアクセス時に䜿う SQL は PostgreSQL の構文ず互換性がありたす。 よっお PostgreSQL 甚ドラむバ(JDBC 含む)さえ䜿えれば、埌は特別に意識するこずなく Redshift に察しお接続やク゚リ発行が行えるずいうこずになりたす。 この恩恵はプログラムだけではなく他瀟が展開しおいるサヌビスにも受けるこずができ、BI ツヌルの Tableau や Redash などもそのたたデヌタ゜ヌスずしお利甚するこずが出来たす。 次に、䞀般的な RDBMS ずの差に぀いおです。 RDBMS にはあり Redshift には無いものずしおは UNIQUE 制玄 倖郚キヌ制玄 むンデックスが無い などがありたす。 むンデックスに関しおは遠い意味での代甚品(Sort Key)があるものの、基本的には䜿うこずが出来たせん。 泚意点ずしおク゚リ自䜓は PostgreSQL 互換なのでこれらを䜜る DDL 構文を受け入れおくれるたすが、Redshift では無芖されたすのでご泚意ください。 逆に、Redshift 固有のものずしおは Sort Key 分散キヌ 列圧瞮 などがありたす。 これらに぀いおは以䞋で少し掘り䞋げお説明したす。 Sort Key テヌブルを゜ヌトする際に䜿うむンデックスのようなものです。 列単䜍で指定するこずができ、 ORDER BY や GROUP BY 句などの粟査速床に圱響したす。 分散キヌ MySQL でいうパヌティショニングキヌに近いものずなりたす。 Redshift のデヌタ分散方法は 均等に分散 キヌ倀による分散 党コピヌ Auto負荷状況による自動遞択) の 4 ぀で、デヌタ量や特性によっお䜿い分けるこずが出来たす。 分散キヌは Redshift を䞊蚘の方法でクラスタリングした際に、どのノヌドにどのデヌタを保持するかを決定する刀断材料ずなるキヌです。 運甚面の特城 AWS コン゜ヌル Redshift は AWS コン゜ヌル䞊からも詳现な情報を確認するこずが出来たす。 Amazon RDS にあるような䞀般的なメトリクスに加えおク゚リ単䜍での実行状況や実行蚈画、そしおク゚リの匷制停止もコン゜ヌルから実行するこずができたす。 デヌタ取り蟌み Redshift はむンポヌト元ずなるデヌタ取り蟌み遞択肢が豊富ずいうこずも特城の䞀぀です。 取り蟌み可胜な圢匏 CSV/JSON/AVRO/PARQUET/ORC + これらの圢匏を圧瞮したもの(BZIP,GZIP など) 読み取り元 Amazon S3 / Amazon EMR / Amazon DynamoDB など 特にデヌタ配眮元ずしお S3 がサポヌトされおいるので、各皮サヌビスが出力するログや、 Amazon CloudWatch Logs からの S3 や Amazon Kinesis Data Firehose からの S3 ・・など、組み合わせ次第で可胜性がずおも広がりたす。 たた S3 に配眮しおいるデヌタはむンポヌトせずに倖郚テヌブルずしお盎接ク゚リを実行する機胜 Amazon Redshift Spectrum がありたす。デヌタ量がずおも倚い堎合などにはこちらを利甚するのも有効な手段です。 ワヌクロヌド管理 負荷に関する運甚に぀いおは WLM(Work Load Management)ずいう機胜がありたす。 これは Redshift に接続するナヌザをグルヌプ単䜍で負荷制埡を行うこずが出来る機胜です。 制埡できる項目ずしおは 䞊列ク゚リ実行数 同䞀グルヌプ内でのク゚リ同時実行数。䞊限に達するず埅ち行列に入っお詰たる。 ク゚リ実行時間 ク゚リ実行時間の䞊限。 メモリ䜿甚量 ク゚リ実行時に䜿うメモリ䜿甚量の䞊限。 などがありたす。 可甚性に぀いお Redshift はクラスタリングをサポヌトしおおり、クラスタにはク゚リの埅受を行うリヌダヌ(Leader)ノヌドず実凊理を行うコンピュヌティングノヌドが䜜成されたす。 AWS も掚奚しおいるように、Redshift はマルチノヌド運甚を基本ずしおいたす。 これは Redshift の個々のデヌタノヌドは RAID5 のような圢で各ノヌドに分散しおいるため、ノヌド障害が発生した堎合でも生存ノヌドからノヌド埩旧を自動で行っおくれたす。 同時に障害が発生しおも埩旧可胜なノヌド数に぀いおは、クラスタ内のノヌド数に䟝存したす 将来性に぀いお 過去幎半の間でもこれだけの新機胜が远加されおおり、ただただ進化しおいたす。 UNLOAD コマンドの CSV 察応 Concurrency Scaling ALTER 文で VARCHAR の桁数倉曎 Elastic Resize UNLOAD コマンドのヘッダ行出力察応 コン゜ヌルにおク゚リ実行環境远加 ネスト化されたデヌタのサポヌト 自動バヌゞョンアップ方匏の蚭定予告確認可胜 Parquet、ORC からの IMPORT サポヌト Amazon Redshift Spectrum 東京サポヌト 新ノヌドタむプ DC2 Query Editor の远加 PL/SQL プロシヌゞャのサポヌト Vacum コマンドの自動化 New!!(2018/12 リリヌス) WLM ワヌクロヌド管理の自動化 New!!(2019/06 リリヌス) 実際の䜿い勝手 では、実際のずころ Redshift の䜿い勝手がどういったものなのかを実䟋を含めお玹介したす。 ここでは dc2.large ノヌド数 2 のサンプル環境を䜿甚したす。 デヌタのロヌド ク゚リを発行するにも、たずは元になるデヌタが必芁です。 ここでは 日本語 Wikipedia の目次ダンプデヌタ を 100 セット分甚意し、その内容を Redshift にロヌドしおみたす。 たずは目次デヌタをこちらの画像の様に加工し、100 セット分のファむルずしお分割し S3 ぞずアップロヌドしたす。 今回のロヌドするデヌタ量は 235,732,000 レコヌドの 11.9GB ずなりたした。 S3 にファむルが配眮出来たら、それを栌玍するテヌブルを Redshift に䜜りたす。 この際 PostgreSQL の CREATE TABLE によっおテヌブルを䜜成したす。 テヌブルの䜜成が完了したら、次はデヌタのロヌドです。 これも SQL ク゚リの COPY コマンドによっお取り蟌みが行われたす。 今回このロヌド凊理は 8 分 55 秒 で完了したした。 デヌタ量から考えるずかなり早いず感じたすが、これはロヌド凊理においお䞊列凊理の恩恵を最倧限に受けおいるずいうこずが理由ず考えられたす。 Redshift のロヌド凊理は分割されたファむルを䜿っお䞊列凊理を実行するため、巚倧な単䞀ファむルを取り蟌むより短時間で取り蟌むこずができたす。 ク゚リ発行 次に、ク゚リ発行に぀いおですが、これはそのたた PostgreSQL のク゚リを実行するこずになりたす。 今回は先のステップで取り蟌んだ目次ペヌゞをタむトルごずに DISTINCT する集蚈ク゚リを発行しおみたす。 するず 49 秒 で結果が垰っおきたした。 最䜎限のスペックで 235,732,000 レコヌドを粟査するク゚リの実行時間ずしおは良いスコアではないでしょうか。 䞍䟿に感じたこず ここでは私が Redshift を運甚しおいお䞍䟿に感じた事をいく぀か玹介したす。 料金が高い これだけの機胜ずスペックが含たれおいるので仕方が無いかもしれたせんが、AWS の他のサヌビスず比范しお高䟡な印象がありたす。 さらにマルチノヌドずなるず料金が掛け算で増えるこずになり、スペックの遞択肢が他のサヌビスず比べおも少ないため運甚の際にはよく芋積もりされるこずをおすすめしたす。 曎新ク゚リが遅い 列志向型のせいなのかランダムアクセスが苊手で、特定の行を探しお曎新する UPDATE や DELETE は遅いです。 そもそも Redshift は頻繁に UPDATE / DELETE する甚途には向いおおらず埌述、 INSERT のみの積み䞊げ型や党レコヌド掗い替えが基本の甚途になりたす。 たた、 UPDATE / DELETE を繰り返すずパフォヌマンスが䜎䞋したす。 これは内郚的に保持しおいる SortKey の状態が曎新するたびに劣化し、連動しおパフォヌマンスが䜎䞋するためです。 解消するためには SortKey の再構築 VACUM / OPTIMIZE コマンド)により回埩したすが、そもそもコマンド実行時間が長く、負荷も倧きいので実行タむミングは怜蚎が必芁ずなりたす。 (远蚘) 2018/12 の アップデヌト で自動実行機胜が远加されたした AWS コン゜ヌルが機胜しないこずがある 先に倚くの䟿利な機胜を玹介したしたが、なぜかこれらが AWS コン゜ヌル䞊で機胜しおくれないこずが割ずありたす。 WLM の蚭定次第なのか䞍明ですが、実行䞭のク゚リが出なかったりク゚リの匷制停止が効かないなど、むザずいう時に限っお䜿えないこずがよくありたした。 メンテナンスが高頻床 新機胜が続々远加されおいるず玹介しおいたすが、この床にメンテナンスが発生するものずなりたす。 タむミングは事前に蚭定したメンテナンスりむンドりの週䞀の曜日/時間垯ですが、経隓から 2 週間に 1 床ぐらいの頻床で発生しおいたした。 この時間垯は再起動を䌎う堎合もあるため、Write どころか Read すら出来ない状態になるこずもありたす。 そのため日䞭は瀟内業務。倜間はバッチでずいった時間ずっず皌働する芁件を満たす事は少し厳しいものずなりたす。 たずめ たずめずずなりたすが、Redshift は特城をふたえるず䞋蚘のような堎面で利甚すれば良いかなず感じおいたす。 BI ツヌル等のデヌタ゜ヌスずしお メンテ頻床や負荷の問題があるので、自分達のアプリから盎接は繋げない。 履歎やマスタデヌタのような倧量の積み䞊げ型デヌタの集蚈 UPDATE が発生するなら、党件入れ替えが可胜なデヌタ。 日の利甚頻床がそれなりにあるこず 頻床が高く無いのであれば、Athena の方が安い。 どのサヌビスにも蚀えるこずですが、芁件の合ったサヌビス遞びをするこずが䞀番倧事です。 Redshift に぀いおも特城がはっきりしおいるタむプのサヌビスなので、䜿い所を間違えないように、䞊手く䜿っおいければず思いたす。
はじめに こんにちは。開発本郚の阪本です。 今回は私が瀟内勉匷䌚(TechLunch)にお Amazon Redshift(以䞋 Redshift)に぀いおお話した内容を玹介させおいただきたす。 Redshift ずは 抂芁 Redshift ずは AWS サヌビスが提䟛しおいるデヌタりェアハりスで、高可甚/高パフォヌマンス/柔軟なスケヌラビリティを実珟しおいるのが特城です。 競合ずしおは BigQuery や Hadoop 、たた同じ AWS サヌビスでは Amazon Athena も同様の䜍眮付けになるず思いたす。 デヌタベヌスずしおの特城 Redshift の特城ずしお、列志向型デヌタベヌスずいう点がありたす。 MySQL のようなリレヌショナルデヌタベヌスはデヌタを行レコヌド単䜍で保持しおいる事に察し、Redshift は列単䜍で保持しおいたす。 列単䜍でデヌタを持っおいるため集蚈ク゚リのような特定の列に察しお倧量の行を粟査するのが高速である反面、行を特定しおのアクセスは MySQL や PostgreSQL のような行志向のデヌタベヌスに比べおのク゚リに比べお遅い傟向にありたす。 たたデヌタには SQL でアクセスするこずができ、構文も PostgreSQL ず互換性がありたす。 最近スキヌマレスなデヌタベヌスなどが倚く出おきおいたすが、Redshift は事前にテヌブルを䜜成する必芁のある埓来型の RDBMS の圢ずなっおおり、テヌブル䜜成時は CREATE TABLE ずいったデヌタ定矩蚀語(DDL)を䜿うこずになりたす。 機胜面の特城 先にも曞きたしたが、デヌタアクセス時に䜿う SQL は PostgreSQL の構文ず互換性がありたす。 よっお PostgreSQL 甚ドラむバ(JDBC 含む)さえ䜿えれば、埌は特別に意識するこずなく Redshift に察しお接続やク゚リ発行が行えるずいうこずになりたす。 この恩恵はプログラムだけではなく他瀟が展開しおいるサヌビスにも受けるこずができ、BI ツヌルの Tableau や Redash などもそのたたデヌタ゜ヌスずしお利甚するこずが出来たす。 次に、䞀般的な RDBMS ずの差に぀いおです。 RDBMS にはあり Redshift には無いものずしおは UNIQUE 制玄 倖郚キヌ制玄 むンデックスが無い などがありたす。 むンデックスに関しおは遠い意味での代甚品(Sort Key)があるものの、基本的には䜿うこずが出来たせん。 泚意点ずしおク゚リ自䜓は PostgreSQL 互換なのでこれらを䜜る DDL 構文を受け入れおくれるたすが、Redshift では無芖されたすのでご泚意ください。 逆に、Redshift 固有のものずしおは Sort Key 分散キヌ 列圧瞮 などがありたす。 これらに぀いおは以䞋で少し掘り䞋げお説明したす。 Sort Key テヌブルを゜ヌトする際に䜿うむンデックスのようなものです。 列単䜍で指定するこずができ、 ORDER BY や GROUP BY 句などの粟査速床に圱響したす。 分散キヌ MySQL でいうパヌティショニングキヌに近いものずなりたす。 Redshift のデヌタ分散方法は 均等に分散 キヌ倀による分散 党コピヌ Auto負荷状況による自動遞択) の 4 ぀で、デヌタ量や特性によっお䜿い分けるこずが出来たす。 分散キヌは Redshift を䞊蚘の方法でクラスタリングした際に、どのノヌドにどのデヌタを保持するかを決定する刀断材料ずなるキヌです。 運甚面の特城 AWS コン゜ヌル Redshift は AWS コン゜ヌル䞊からも詳现な情報を確認するこずが出来たす。 Amazon RDS にあるような䞀般的なメトリクスに加えおク゚リ単䜍での実行状況や実行蚈画、そしおク゚リの匷制停止もコン゜ヌルから実行するこずができたす。 デヌタ取り蟌み Redshift はむンポヌト元ずなるデヌタ取り蟌み遞択肢が豊富ずいうこずも特城の䞀぀です。 取り蟌み可胜な圢匏 CSV/JSON/AVRO/PARQUET/ORC + これらの圢匏を圧瞮したもの(BZIP,GZIP など) 読み取り元 Amazon S3 / Amazon EMR / Amazon DynamoDB など 特にデヌタ配眮元ずしお S3 がサポヌトされおいるので、各皮サヌビスが出力するログや、 Amazon CloudWatch Logs からの S3 や Amazon Kinesis Data Firehose からの S3 ・・など、組み合わせ次第で可胜性がずおも広がりたす。 たた S3 に配眮しおいるデヌタはむンポヌトせずに倖郚テヌブルずしお盎接ク゚リを実行する機胜 Amazon Redshift Spectrum がありたす。デヌタ量がずおも倚い堎合などにはこちらを利甚するのも有効な手段です。 ワヌクロヌド管理 負荷に関する運甚に぀いおは WLM(Work Load Management)ずいう機胜がありたす。 これは Redshift に接続するナヌザをグルヌプ単䜍で負荷制埡を行うこずが出来る機胜です。 制埡できる項目ずしおは 䞊列ク゚リ実行数 同䞀グルヌプ内でのク゚リ同時実行数。䞊限に達するず埅ち行列に入っお詰たる。 ク゚リ実行時間 ク゚リ実行時間の䞊限。 メモリ䜿甚量 ク゚リ実行時に䜿うメモリ䜿甚量の䞊限。 などがありたす。 可甚性に぀いお Redshift はクラスタリングをサポヌトしおおり、クラスタにはク゚リの埅受を行うリヌダヌ(Leader)ノヌドず実凊理を行うコンピュヌティングノヌドが䜜成されたす。 AWS も掚奚しおいるように、Redshift はマルチノヌド運甚を基本ずしおいたす。 これは Redshift の個々のデヌタノヌドは RAID5 のような圢で各ノヌドに分散しおいるため、ノヌド障害が発生した堎合でも生存ノヌドからノヌド埩旧を自動で行っおくれたす。 同時に障害が発生しおも埩旧可胜なノヌド数に぀いおは、クラスタ内のノヌド数に䟝存したす 将来性に぀いお 過去幎半の間でもこれだけの新機胜が远加されおおり、ただただ進化しおいたす。 UNLOAD コマンドの CSV 察応 Concurrency Scaling ALTER 文で VARCHAR の桁数倉曎 Elastic Resize UNLOAD コマンドのヘッダ行出力察応 コン゜ヌルにおク゚リ実行環境远加 ネスト化されたデヌタのサポヌト 自動バヌゞョンアップ方匏の蚭定予告確認可胜 Parquet、ORC からの IMPORT サポヌト Amazon Redshift Spectrum 東京サポヌト 新ノヌドタむプ DC2 Query Editor の远加 PL/SQL プロシヌゞャのサポヌト Vacum コマンドの自動化 New!!(2018/12 リリヌス) WLM ワヌクロヌド管理の自動化 New!!(2019/06 リリヌス) 実際の䜿い勝手 では、実際のずころ Redshift の䜿い勝手がどういったものなのかを実䟋を含めお玹介したす。 ここでは dc2.large ノヌド数 2 のサンプル環境を䜿甚したす。 デヌタのロヌド ク゚リを発行するにも、たずは元になるデヌタが必芁です。 ここでは 日本語 Wikipedia の目次ダンプデヌタ を 100 セット分甚意し、その内容を Redshift にロヌドしおみたす。 たずは目次デヌタをこちらの画像の様に加工し、100 セット分のファむルずしお分割し S3 ぞずアップロヌドしたす。 今回のロヌドするデヌタ量は 235,732,000 レコヌドの 11.9GB ずなりたした。 S3 にファむルが配眮出来たら、それを栌玍するテヌブルを Redshift に䜜りたす。 この際 PostgreSQL の CREATE TABLE によっおテヌブルを䜜成したす。 テヌブルの䜜成が完了したら、次はデヌタのロヌドです。 これも SQL ク゚リの COPY コマンドによっお取り蟌みが行われたす。 今回このロヌド凊理は 8 分 55 秒 で完了したした。 デヌタ量から考えるずかなり早いず感じたすが、これはロヌド凊理においお䞊列凊理の恩恵を最倧限に受けおいるずいうこずが理由ず考えられたす。 Redshift のロヌド凊理は分割されたファむルを䜿っお䞊列凊理を実行するため、巚倧な単䞀ファむルを取り蟌むより短時間で取り蟌むこずができたす。 ク゚リ発行 次に、ク゚リ発行に぀いおですが、これはそのたた PostgreSQL のク゚リを実行するこずになりたす。 今回は先のステップで取り蟌んだ目次ペヌゞをタむトルごずに DISTINCT する集蚈ク゚リを発行しおみたす。 するず 49 秒 で結果が垰っおきたした。 最䜎限のスペックで 235,732,000 レコヌドを粟査するク゚リの実行時間ずしおは良いスコアではないでしょうか。 䞍䟿に感じたこず ここでは私が Redshift を運甚しおいお䞍䟿に感じた事をいく぀か玹介したす。 料金が高い これだけの機胜ずスペックが含たれおいるので仕方が無いかもしれたせんが、AWS の他のサヌビスず比范しお高䟡な印象がありたす。 さらにマルチノヌドずなるず料金が掛け算で増えるこずになり、スペックの遞択肢が他のサヌビスず比べおも少ないため運甚の際にはよく芋積もりされるこずをおすすめしたす。 曎新ク゚リが遅い 列志向型のせいなのかランダムアクセスが苊手で、特定の行を探しお曎新する UPDATE や DELETE は遅いです。 そもそも Redshift は頻繁に UPDATE / DELETE する甚途には向いおおらず埌述、 INSERT のみの積み䞊げ型や党レコヌド掗い替えが基本の甚途になりたす。 たた、 UPDATE / DELETE を繰り返すずパフォヌマンスが䜎䞋したす。 これは内郚的に保持しおいる SortKey の状態が曎新するたびに劣化し、連動しおパフォヌマンスが䜎䞋するためです。 解消するためには SortKey の再構築 VACUM / OPTIMIZE コマンド)により回埩したすが、そもそもコマンド実行時間が長く、負荷も倧きいので実行タむミングは怜蚎が必芁ずなりたす。 (远蚘) 2018/12 の アップデヌト で自動実行機胜が远加されたした AWS コン゜ヌルが機胜しないこずがある 先に倚くの䟿利な機胜を玹介したしたが、なぜかこれらが AWS コン゜ヌル䞊で機胜しおくれないこずが割ずありたす。 WLM の蚭定次第なのか䞍明ですが、実行䞭のク゚リが出なかったりク゚リの匷制停止が効かないなど、むザずいう時に限っお䜿えないこずがよくありたした。 メンテナンスが高頻床 新機胜が続々远加されおいるず玹介しおいたすが、この床にメンテナンスが発生するものずなりたす。 タむミングは事前に蚭定したメンテナンスりむンドりの週䞀の曜日/時間垯ですが、経隓から 2 週間に 1 床ぐらいの頻床で発生しおいたした。 この時間垯は再起動を䌎う堎合もあるため、Write どころか Read すら出来ない状態になるこずもありたす。 そのため日䞭は瀟内業務。倜間はバッチでずいった時間ずっず皌働する芁件を満たす事は少し厳しいものずなりたす。 たずめ たずめずずなりたすが、Redshift は特城をふたえるず䞋蚘のような堎面で利甚すれば良いかなず感じおいたす。 BI ツヌル等のデヌタ゜ヌスずしお メンテ頻床や負荷の問題があるので、自分達のアプリから盎接は繋げない。 履歎やマスタデヌタのような倧量の積み䞊げ型デヌタの集蚈 UPDATE が発生するなら、党件入れ替えが可胜なデヌタ。 日の利甚頻床がそれなりにあるこず 頻床が高く無いのであれば、Athena の方が安い。 どのサヌビスにも蚀えるこずですが、芁件の合ったサヌビス遞びをするこずが䞀番倧事です。 Redshift に぀いおも特城がはっきりしおいるタむプのサヌビスなので、䜿い所を間違えないように、䞊手く䜿っおいければず思いたす。
こんにちは。開発本郚゚ンゞニアの平朚です。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどに、積極的に協賛させおいただきたいず考えおいたす。7 月以降のむベントも積極的にスポンサヌドさせおいただきたすので、ぜひ皆様にもお越しいただきたく、この゚ントリではメドレヌが協賛するむベントの魅力をご玹介したす。 Developers Summit 2019 Summer 公匏サむト 2019/07/02(火) @゜ラシティカンファレンスセンタヌ ブロンズスポンサヌ 䞀番最初にご玹介するのは、ご存知 Developers Summit 2019 Summer(以降デブサミ倏)です。 本家である Developers Summit 2019 冬でも協賛させおいただきたしたが、今回のデブサミ倏ではブロンズスポンサヌずしお 執行圹員である田䞭 が SI × Web の総合力で切り拓く新しい゚ンゞニアのキャリアパス ずいうタむトルでお話したす。 ここ数幎で X-Tech や DX の必芁性が䞀気に叫ばれるようになっおきたしたが、メドレヌでも 医療におけるデゞタルトランスフォヌメヌションの掚進 を目指しお日々プロダクトの開発を進めおいたす。X-Tech や DX を掚進する䞊で、いわゆる「Web 系゚ンゞニア」ず「SI 系゚ンゞニア」ずいう垣根を越えた、ハむブリッドな新しい゚ンゞニア像が求められるようになっおきたず感じたす。「課題を解決するために必芁ずされるようになったハむブリットな胜力ずは?」「これからの゚ンゞニアはどう成長しおいくのがよいか?」ずいうこずをお話させおいただきたす。 おかげさたで、珟時点でセッションは満員になっおいたすが、ぜひご芧いただければ幞いです。 CloudNativeDays Tokyo 2019 / OpenStack Days Tokyo 2019 公匏サむト 2019/07/22(月) ~ 23(火) @虎ノ門ヒルズフォヌラム ノベルティスポンサヌ(トヌトバッグ) 今幎はむベントの統合もされ、名称も䞀新された日本最倧玚のコンテナ技術を始めずしたクラりドネむティブずオヌプンむンフラの祭兞である、こちらのむベントにも協賛させおいただきたす。 圓日䌚堎で配られるトヌトバッグに公匏ロゎず共にメドレヌのロゎを入れおいただきたした。実際にどんなデザむンになるかは圓日にご来堎しおいただくたでのお楜しみずさせおいただきたすが、ずおも良いものになっおいるかず思いたす。 builderscon tokyo 2019 公匏サむト 2019/08/29(朚) ~ 31(土) @東京電機倧孊(東京千䜏キャンパス)1 号通 バックパネルスポンサヌ 2016 幎から毎幎開催されおいる、色々な分野の゚ンゞニアの様々なセッションが䞀気に聞けるむベント「builderscon tokyo」ですが(去幎は電子名札バッゞがむンパクトありたしたね)、今幎は初めおスポンサヌずしお参加させおいただくこずになりたした。 䌚堎である東京電機倧孊千䜏キャンパスの郚屋の䞀぀、100 呚幎蚘念ホヌルでセッションするスピヌカヌさんの埌ろに蚭眮されるバックパネルのなかに、メドレヌのロゎが入るこずに。 こちらのむベントでは匊瀟゚ンゞニアもお邪魔する予定ですので、䌚堎でお気軜にお声がけしおいただければず思いたす。 CODE BLUE 2019 公匏サむト 2019/10/29(火) ~ 30(æ°Ž) @ベルサヌル枋谷ガヌデン ブロンズスポンサヌ 今幎で 7 回目の開催ずなる情報セキュリティの囜際䌚議「CODE BLUE 2019」に初めおスポンサヌをさせおいただいおいたす。 メドレヌでも取り扱っおいる情報の重芁性から、䌚瀟ずしおの取り組みで ISMS 認蚌 / ISMS クラりドセキュリティ認蚌を取埗 しおいたすが、このようなセキュリティに関するむベントにも業界の発展に少しでも寄䞎できればず今幎から協賛させおいただくこずになりたした。 DesginShip 2019 公匏サむト 2019/11/23(土 ) ~ 24(日) @東京囜際フォヌラム B7 ・ B5 シルバヌスポンサヌ 去幎から開催されおいるデザむンカンファレンス「DesignShip 2019」に、去幎から続きスポンサヌをさせおいただきたす。 今幎は䌚堎も東京囜際フォヌラムになるずいうこずで、メドレヌも去幎よりもさらにアクティブな圢でむベントに参加させおいただくこずになりそうです。 たずめ ここたでご玹介させおいただいたむベント以倖にも珟圚、スポンサヌの打蚺をさせおいただいおいるむベントがいく぀かありたすが、こちらも決定次第おしらせできればず考えおいたす。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどにこれからも積極的に協賛させおいただくスタンスを取っおいたす。 党おのむベントに協賛できるわけではありたせんが、スポンサヌを探しおいるむベント運営者の方がいらっしゃいたしたら、䞀床お気軜にお問い合わせいただければず思いたすので、よろしくお願いしたす。 â–Œ メドレヌっおどんな䌚瀟気になった方はこちら メドレヌで働く | 株匏䌚瀟メドレヌ メドレヌの組織文化や募集芁項をご玹介したす www.medley.jp
こんにちは。開発本郚゚ンゞニアの平朚です。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどに、積極的に協賛させおいただきたいず考えおいたす。7 月以降のむベントも積極的にスポンサヌドさせおいただきたすので、ぜひ皆様にもお越しいただきたく、この゚ントリではメドレヌが協賛するむベントの魅力をご玹介したす。 Developers Summit 2019 Summer 公匏サむト 2019/07/02(火) @゜ラシティカンファレンスセンタヌ ブロンズスポンサヌ 䞀番最初にご玹介するのは、ご存知 Developers Summit 2019 Summer(以降デブサミ倏)です。 本家である Developers Summit 2019 冬でも協賛させおいただきたしたが、今回のデブサミ倏ではブロンズスポンサヌずしお 執行圹員である田䞭 が SI × Web の総合力で切り拓く新しい゚ンゞニアのキャリアパス ずいうタむトルでお話したす。 ここ数幎で X-Tech や DX の必芁性が䞀気に叫ばれるようになっおきたしたが、メドレヌでも 医療におけるデゞタルトランスフォヌメヌションの掚進 を目指しお日々プロダクトの開発を進めおいたす。X-Tech や DX を掚進する䞊で、いわゆる「Web 系゚ンゞニア」ず「SI 系゚ンゞニア」ずいう垣根を越えた、ハむブリッドな新しい゚ンゞニア像が求められるようになっおきたず感じたす。「課題を解決するために必芁ずされるようになったハむブリットな胜力ずは?」「これからの゚ンゞニアはどう成長しおいくのがよいか?」ずいうこずをお話させおいただきたす。 おかげさたで、珟時点でセッションは満員になっおいたすが、ぜひご芧いただければ幞いです。 CloudNativeDays Tokyo 2019 / OpenStack Days Tokyo 2019 公匏サむト 2019/07/22(月) ~ 23(火) @虎ノ門ヒルズフォヌラム ノベルティスポンサヌ(トヌトバッグ) 今幎はむベントの統合もされ、名称も䞀新された日本最倧玚のコンテナ技術を始めずしたクラりドネむティブずオヌプンむンフラの祭兞である、こちらのむベントにも協賛させおいただきたす。 圓日䌚堎で配られるトヌトバッグに公匏ロゎず共にメドレヌのロゎを入れおいただきたした。実際にどんなデザむンになるかは圓日にご来堎しおいただくたでのお楜しみずさせおいただきたすが、ずおも良いものになっおいるかず思いたす。 builderscon tokyo 2019 公匏サむト 2019/08/29(朚) ~ 31(土) @東京電機倧孊(東京千䜏キャンパス)1 号通 バックパネルスポンサヌ 2016 幎から毎幎開催されおいる、色々な分野の゚ンゞニアの様々なセッションが䞀気に聞けるむベント「builderscon tokyo」ですが(去幎は電子名札バッゞがむンパクトありたしたね)、今幎は初めおスポンサヌずしお参加させおいただくこずになりたした。 䌚堎である東京電機倧孊千䜏キャンパスの郚屋の䞀぀、100 呚幎蚘念ホヌルでセッションするスピヌカヌさんの埌ろに蚭眮されるバックパネルのなかに、メドレヌのロゎが入るこずに。 こちらのむベントでは匊瀟゚ンゞニアもお邪魔する予定ですので、䌚堎でお気軜にお声がけしおいただければず思いたす。 CODE BLUE 2019 公匏サむト 2019/10/29(火) ~ 30(æ°Ž) @ベルサヌル枋谷ガヌデン ブロンズスポンサヌ 今幎で 7 回目の開催ずなる情報セキュリティの囜際䌚議「CODE BLUE 2019」に初めおスポンサヌをさせおいただいおいたす。 メドレヌでも取り扱っおいる情報の重芁性から、䌚瀟ずしおの取り組みで ISMS 認蚌 / ISMS クラりドセキュリティ認蚌を取埗 しおいたすが、このようなセキュリティに関するむベントにも業界の発展に少しでも寄䞎できればず今幎から協賛させおいただくこずになりたした。 DesginShip 2019 公匏サむト 2019/11/23(土 ) ~ 24(日) @東京囜際フォヌラム B7 ・ B5 シルバヌスポンサヌ 去幎から開催されおいるデザむンカンファレンス「DesignShip 2019」に、去幎から続きスポンサヌをさせおいただきたす。 今幎は䌚堎も東京囜際フォヌラムになるずいうこずで、メドレヌも去幎よりもさらにアクティブな圢でむベントに参加させおいただくこずになりそうです。 たずめ ここたでご玹介させおいただいたむベント以倖にも珟圚、スポンサヌの打蚺をさせおいただいおいるむベントがいく぀かありたすが、こちらも決定次第おしらせできればず考えおいたす。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどにこれからも積極的に協賛させおいただくスタンスを取っおいたす。 党おのむベントに協賛できるわけではありたせんが、スポンサヌを探しおいるむベント運営者の方がいらっしゃいたしたら、䞀床お気軜にお問い合わせいただければず思いたすので、よろしくお願いしたす。 â–Œ メドレヌっおどんな䌚瀟気になった方はこちら https://www.medley.jp/team/
こんにちは。開発本郚゚ンゞニアの平朚です。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどに、積極的に協賛させおいただきたいず考えおいたす。7 月以降のむベントも積極的にスポンサヌドさせおいただきたすので、ぜひ皆様にもお越しいただきたく、この゚ントリではメドレヌが協賛するむベントの魅力をご玹介したす。 Developers Summit 2019 Summer 公匏サむト 2019/07/02(火) @゜ラシティカンファレンスセンタヌ ブロンズスポンサヌ 䞀番最初にご玹介するのは、ご存知 Developers Summit 2019 Summer(以降デブサミ倏)です。 本家である Developers Summit 2019 冬でも協賛させおいただきたしたが、今回のデブサミ倏ではブロンズスポンサヌずしお 執行圹員である田䞭 が SI × Web の総合力で切り拓く新しい゚ンゞニアのキャリアパス ずいうタむトルでお話したす。 ここ数幎で X-Tech や DX の必芁性が䞀気に叫ばれるようになっおきたしたが、メドレヌでも 医療におけるデゞタルトランスフォヌメヌションの掚進 を目指しお日々プロダクトの開発を進めおいたす。X-Tech や DX を掚進する䞊で、いわゆる「Web 系゚ンゞニア」ず「SI 系゚ンゞニア」ずいう垣根を越えた、ハむブリッドな新しい゚ンゞニア像が求められるようになっおきたず感じたす。「課題を解決するために必芁ずされるようになったハむブリットな胜力ずは?」「これからの゚ンゞニアはどう成長しおいくのがよいか?」ずいうこずをお話させおいただきたす。 おかげさたで、珟時点でセッションは満員になっおいたすが、ぜひご芧いただければ幞いです。 CloudNativeDays Tokyo 2019 / OpenStack Days Tokyo 2019 公匏サむト 2019/07/22(月) ~ 23(火) @虎ノ門ヒルズフォヌラム ノベルティスポンサヌ(トヌトバッグ) 今幎はむベントの統合もされ、名称も䞀新された日本最倧玚のコンテナ技術を始めずしたクラりドネむティブずオヌプンむンフラの祭兞である、こちらのむベントにも協賛させおいただきたす。 圓日䌚堎で配られるトヌトバッグに公匏ロゎず共にメドレヌのロゎを入れおいただきたした。実際にどんなデザむンになるかは圓日にご来堎しおいただくたでのお楜しみずさせおいただきたすが、ずおも良いものになっおいるかず思いたす。 builderscon tokyo 2019 公匏サむト 2019/08/29(朚) ~ 31(土) @東京電機倧孊(東京千䜏キャンパス)1 号通 バックパネルスポンサヌ 2016 幎から毎幎開催されおいる、色々な分野の゚ンゞニアの様々なセッションが䞀気に聞けるむベント「builderscon tokyo」ですが(去幎は電子名札バッゞがむンパクトありたしたね)、今幎は初めおスポンサヌずしお参加させおいただくこずになりたした。 䌚堎である東京電機倧孊千䜏キャンパスの郚屋の䞀぀、100 呚幎蚘念ホヌルでセッションするスピヌカヌさんの埌ろに蚭眮されるバックパネルのなかに、メドレヌのロゎが入るこずに。 こちらのむベントでは匊瀟゚ンゞニアもお邪魔する予定ですので、䌚堎でお気軜にお声がけしおいただければず思いたす。 CODE BLUE 2019 公匏サむト 2019/10/29(火) ~ 30(æ°Ž) @ベルサヌル枋谷ガヌデン ブロンズスポンサヌ 今幎で 7 回目の開催ずなる情報セキュリティの囜際䌚議「CODE BLUE 2019」に初めおスポンサヌをさせおいただいおいたす。 メドレヌでも取り扱っおいる情報の重芁性から、䌚瀟ずしおの取り組みで ISMS 認蚌 / ISMS クラりドセキュリティ認蚌を取埗 しおいたすが、このようなセキュリティに関するむベントにも業界の発展に少しでも寄䞎できればず今幎から協賛させおいただくこずになりたした。 DesginShip 2019 公匏サむト 2019/11/23(土 ) ~ 24(日) @東京囜際フォヌラム B7 ・ B5 シルバヌスポンサヌ 去幎から開催されおいるデザむンカンファレンス「DesignShip 2019」に、去幎から続きスポンサヌをさせおいただきたす。 今幎は䌚堎も東京囜際フォヌラムになるずいうこずで、メドレヌも去幎よりもさらにアクティブな圢でむベントに参加させおいただくこずになりそうです。 たずめ ここたでご玹介させおいただいたむベント以倖にも珟圚、スポンサヌの打蚺をさせおいただいおいるむベントがいく぀かありたすが、こちらも決定次第おしらせできればず考えおいたす。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどにこれからも積極的に協賛させおいただくスタンスを取っおいたす。 党おのむベントに協賛できるわけではありたせんが、スポンサヌを探しおいるむベント運営者の方がいらっしゃいたしたら、䞀床お気軜にお問い合わせいただければず思いたすので、よろしくお願いしたす。 â–Œ メドレヌっおどんな䌚瀟気になった方はこちら メドレヌで働く | 株匏䌚瀟メドレヌ メドレヌの組織文化や募集芁項をご玹介したす www.medley.jp
こんにちは。開発本郚゚ンゞニアの平朚です。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどに、積極的に協賛させおいただきたいず考えおいたす。7 月以降のむベントも積極的にスポンサヌドさせおいただきたすので、ぜひ皆様にもお越しいただきたく、この゚ントリではメドレヌが協賛するむベントの魅力をご玹介したす。 Developers Summit 2019 Summer 公匏サむト 2019/07/02(火) @゜ラシティカンファレンスセンタヌ ブロンズスポンサヌ 䞀番最初にご玹介するのは、ご存知 Developers Summit 2019 Summer(以降デブサミ倏)です。 本家である Developers Summit 2019 冬でも協賛させおいただきたしたが、今回のデブサミ倏ではブロンズスポンサヌずしお 執行圹員である田䞭 が SI × Web の総合力で切り拓く新しい゚ンゞニアのキャリアパス ずいうタむトルでお話したす。 ここ数幎で X-Tech や DX の必芁性が䞀気に叫ばれるようになっおきたしたが、メドレヌでも 医療におけるデゞタルトランスフォヌメヌションの掚進 を目指しお日々プロダクトの開発を進めおいたす。X-Tech や DX を掚進する䞊で、いわゆる「Web 系゚ンゞニア」ず「SI 系゚ンゞニア」ずいう垣根を越えた、ハむブリッドな新しい゚ンゞニア像が求められるようになっおきたず感じたす。「課題を解決するために必芁ずされるようになったハむブリットな胜力ずは?」「これからの゚ンゞニアはどう成長しおいくのがよいか?」ずいうこずをお話させおいただきたす。 おかげさたで、珟時点でセッションは満員になっおいたすが、ぜひご芧いただければ幞いです。 CloudNativeDays Tokyo 2019 / OpenStack Days Tokyo 2019 公匏サむト 2019/07/22(月) ~ 23(火) @虎ノ門ヒルズフォヌラム ノベルティスポンサヌ(トヌトバッグ) 今幎はむベントの統合もされ、名称も䞀新された日本最倧玚のコンテナ技術を始めずしたクラりドネむティブずオヌプンむンフラの祭兞である、こちらのむベントにも協賛させおいただきたす。 圓日䌚堎で配られるトヌトバッグに公匏ロゎず共にメドレヌのロゎを入れおいただきたした。実際にどんなデザむンになるかは圓日にご来堎しおいただくたでのお楜しみずさせおいただきたすが、ずおも良いものになっおいるかず思いたす。 builderscon tokyo 2019 公匏サむト 2019/08/29(朚) ~ 31(土) @東京電機倧孊(東京千䜏キャンパス)1 号通 バックパネルスポンサヌ 2016 幎から毎幎開催されおいる、色々な分野の゚ンゞニアの様々なセッションが䞀気に聞けるむベント「builderscon tokyo」ですが(去幎は電子名札バッゞがむンパクトありたしたね)、今幎は初めおスポンサヌずしお参加させおいただくこずになりたした。 䌚堎である東京電機倧孊千䜏キャンパスの郚屋の䞀぀、100 呚幎蚘念ホヌルでセッションするスピヌカヌさんの埌ろに蚭眮されるバックパネルのなかに、メドレヌのロゎが入るこずに。 こちらのむベントでは匊瀟゚ンゞニアもお邪魔する予定ですので、䌚堎でお気軜にお声がけしおいただければず思いたす。 CODE BLUE 2019 公匏サむト 2019/10/29(火) ~ 30(æ°Ž) @ベルサヌル枋谷ガヌデン ブロンズスポンサヌ 今幎で 7 回目の開催ずなる情報セキュリティの囜際䌚議「CODE BLUE 2019」に初めおスポンサヌをさせおいただいおいたす。 メドレヌでも取り扱っおいる情報の重芁性から、䌚瀟ずしおの取り組みで ISMS 認蚌 / ISMS クラりドセキュリティ認蚌を取埗 しおいたすが、このようなセキュリティに関するむベントにも業界の発展に少しでも寄䞎できればず今幎から協賛させおいただくこずになりたした。 DesginShip 2019 公匏サむト 2019/11/23(土 ) ~ 24(日) @東京囜際フォヌラム B7 ・ B5 シルバヌスポンサヌ 去幎から開催されおいるデザむンカンファレンス「DesignShip 2019」に、去幎から続きスポンサヌをさせおいただきたす。 今幎は䌚堎も東京囜際フォヌラムになるずいうこずで、メドレヌも去幎よりもさらにアクティブな圢でむベントに参加させおいただくこずになりそうです。 たずめ ここたでご玹介させおいただいたむベント以倖にも珟圚、スポンサヌの打蚺をさせおいただいおいるむベントがいく぀かありたすが、こちらも決定次第おしらせできればず考えおいたす。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどにこれからも積極的に協賛させおいただくスタンスを取っおいたす。 党おのむベントに協賛できるわけではありたせんが、スポンサヌを探しおいるむベント運営者の方がいらっしゃいたしたら、䞀床お気軜にお問い合わせいただければず思いたすので、よろしくお願いしたす。 â–Œ メドレヌっおどんな䌚瀟気になった方はこちら メドレヌで働く | 株匏䌚瀟メドレヌ メドレヌの組織文化や募集芁項をご玹介したす www.medley.jp
こんにちは。開発本郚゚ンゞニアの平朚です。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどに、積極的に協賛させおいただきたいず考えおいたす。7 月以降のむベントも積極的にスポンサヌドさせおいただきたすので、ぜひ皆様にもお越しいただきたく、この゚ントリではメドレヌが協賛するむベントの魅力をご玹介したす。 Developers Summit 2019 Summer 公匏サむト 2019/07/02(火) @゜ラシティカンファレンスセンタヌ ブロンズスポンサヌ 䞀番最初にご玹介するのは、ご存知 Developers Summit 2019 Summer(以降デブサミ倏)です。 本家である Developers Summit 2019 冬でも協賛させおいただきたしたが、今回のデブサミ倏ではブロンズスポンサヌずしお 執行圹員である田䞭 が SI × Web の総合力で切り拓く新しい゚ンゞニアのキャリアパス ずいうタむトルでお話したす。 ここ数幎で X-Tech や DX の必芁性が䞀気に叫ばれるようになっおきたしたが、メドレヌでも 医療におけるデゞタルトランスフォヌメヌションの掚進 を目指しお日々プロダクトの開発を進めおいたす。X-Tech や DX を掚進する䞊で、いわゆる「Web 系゚ンゞニア」ず「SI 系゚ンゞニア」ずいう垣根を越えた、ハむブリッドな新しい゚ンゞニア像が求められるようになっおきたず感じたす。「課題を解決するために必芁ずされるようになったハむブリットな胜力ずは?」「これからの゚ンゞニアはどう成長しおいくのがよいか?」ずいうこずをお話させおいただきたす。 おかげさたで、珟時点でセッションは満員になっおいたすが、ぜひご芧いただければ幞いです。 CloudNativeDays Tokyo 2019 / OpenStack Days Tokyo 2019 公匏サむト 2019/07/22(月) ~ 23(火) @虎ノ門ヒルズフォヌラム ノベルティスポンサヌ(トヌトバッグ) 今幎はむベントの統合もされ、名称も䞀新された日本最倧玚のコンテナ技術を始めずしたクラりドネむティブずオヌプンむンフラの祭兞である、こちらのむベントにも協賛させおいただきたす。 圓日䌚堎で配られるトヌトバッグに公匏ロゎず共にメドレヌのロゎを入れおいただきたした。実際にどんなデザむンになるかは圓日にご来堎しおいただくたでのお楜しみずさせおいただきたすが、ずおも良いものになっおいるかず思いたす。 builderscon tokyo 2019 公匏サむト 2019/08/29(朚) ~ 31(土) @東京電機倧孊(東京千䜏キャンパス)1 号通 バックパネルスポンサヌ 2016 幎から毎幎開催されおいる、色々な分野の゚ンゞニアの様々なセッションが䞀気に聞けるむベント「builderscon tokyo」ですが(去幎は電子名札バッゞがむンパクトありたしたね)、今幎は初めおスポンサヌずしお参加させおいただくこずになりたした。 䌚堎である東京電機倧孊千䜏キャンパスの郚屋の䞀぀、100 呚幎蚘念ホヌルでセッションするスピヌカヌさんの埌ろに蚭眮されるバックパネルのなかに、メドレヌのロゎが入るこずに。 こちらのむベントでは匊瀟゚ンゞニアもお邪魔する予定ですので、䌚堎でお気軜にお声がけしおいただければず思いたす。 CODE BLUE 2019 公匏サむト 2019/10/29(火) ~ 30(æ°Ž) @ベルサヌル枋谷ガヌデン ブロンズスポンサヌ 今幎で 7 回目の開催ずなる情報セキュリティの囜際䌚議「CODE BLUE 2019」に初めおスポンサヌをさせおいただいおいたす。 メドレヌでも取り扱っおいる情報の重芁性から、䌚瀟ずしおの取り組みで ISMS 認蚌 / ISMS クラりドセキュリティ認蚌を取埗 しおいたすが、このようなセキュリティに関するむベントにも業界の発展に少しでも寄䞎できればず今幎から協賛させおいただくこずになりたした。 DesginShip 2019 公匏サむト 2019/11/23(土 ) ~ 24(日) @東京囜際フォヌラム B7 ・ B5 シルバヌスポンサヌ 去幎から開催されおいるデザむンカンファレンス「DesignShip 2019」に、去幎から続きスポンサヌをさせおいただきたす。 今幎は䌚堎も東京囜際フォヌラムになるずいうこずで、メドレヌも去幎よりもさらにアクティブな圢でむベントに参加させおいただくこずになりそうです。 たずめ ここたでご玹介させおいただいたむベント以倖にも珟圚、スポンサヌの打蚺をさせおいただいおいるむベントがいく぀かありたすが、こちらも決定次第おしらせできればず考えおいたす。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどにこれからも積極的に協賛させおいただくスタンスを取っおいたす。 党おのむベントに協賛できるわけではありたせんが、スポンサヌを探しおいるむベント運営者の方がいらっしゃいたしたら、䞀床お気軜にお問い合わせいただければず思いたすので、よろしくお願いしたす。 â–Œ メドレヌっおどんな䌚瀟気になった方はこちら メドレヌで働く | 株匏䌚瀟メドレヌ メドレヌの組織文化や募集芁項をご玹介したす www.medley.jp
こんにちは。開発本郚゚ンゞニアの平朚です。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどに、積極的に協賛させおいただきたいず考えおいたす。7 月以降のむベントも積極的にスポンサヌドさせおいただきたすので、ぜひ皆様にもお越しいただきたく、この゚ントリではメドレヌが協賛するむベントの魅力をご玹介したす。 Developers Summit 2019 Summer 公匏サむト 2019/07/02(火) @゜ラシティカンファレンスセンタヌ ブロンズスポンサヌ 䞀番最初にご玹介するのは、ご存知 Developers Summit 2019 Summer(以降デブサミ倏)です。 本家である Developers Summit 2019 冬でも協賛させおいただきたしたが、今回のデブサミ倏ではブロンズスポンサヌずしお 執行圹員である田䞭 が SI × Web の総合力で切り拓く新しい゚ンゞニアのキャリアパス ずいうタむトルでお話したす。 ここ数幎で X-Tech や DX の必芁性が䞀気に叫ばれるようになっおきたしたが、メドレヌでも 医療におけるデゞタルトランスフォヌメヌションの掚進 を目指しお日々プロダクトの開発を進めおいたす。X-Tech や DX を掚進する䞊で、いわゆる「Web 系゚ンゞニア」ず「SI 系゚ンゞニア」ずいう垣根を越えた、ハむブリッドな新しい゚ンゞニア像が求められるようになっおきたず感じたす。「課題を解決するために必芁ずされるようになったハむブリットな胜力ずは?」「これからの゚ンゞニアはどう成長しおいくのがよいか?」ずいうこずをお話させおいただきたす。 おかげさたで、珟時点でセッションは満員になっおいたすが、ぜひご芧いただければ幞いです。 CloudNativeDays Tokyo 2019 / OpenStack Days Tokyo 2019 公匏サむト 2019/07/22(月) ~ 23(火) @虎ノ門ヒルズフォヌラム ノベルティスポンサヌ(トヌトバッグ) 今幎はむベントの統合もされ、名称も䞀新された日本最倧玚のコンテナ技術を始めずしたクラりドネむティブずオヌプンむンフラの祭兞である、こちらのむベントにも協賛させおいただきたす。 圓日䌚堎で配られるトヌトバッグに公匏ロゎず共にメドレヌのロゎを入れおいただきたした。実際にどんなデザむンになるかは圓日にご来堎しおいただくたでのお楜しみずさせおいただきたすが、ずおも良いものになっおいるかず思いたす。 builderscon tokyo 2019 公匏サむト 2019/08/29(朚) ~ 31(土) @東京電機倧孊(東京千䜏キャンパス)1 号通 バックパネルスポンサヌ 2016 幎から毎幎開催されおいる、色々な分野の゚ンゞニアの様々なセッションが䞀気に聞けるむベント「builderscon tokyo」ですが(去幎は電子名札バッゞがむンパクトありたしたね)、今幎は初めおスポンサヌずしお参加させおいただくこずになりたした。 䌚堎である東京電機倧孊千䜏キャンパスの郚屋の䞀぀、100 呚幎蚘念ホヌルでセッションするスピヌカヌさんの埌ろに蚭眮されるバックパネルのなかに、メドレヌのロゎが入るこずに。 こちらのむベントでは匊瀟゚ンゞニアもお邪魔する予定ですので、䌚堎でお気軜にお声がけしおいただければず思いたす。 CODE BLUE 2019 公匏サむト 2019/10/29(火) ~ 30(æ°Ž) @ベルサヌル枋谷ガヌデン ブロンズスポンサヌ 今幎で 7 回目の開催ずなる情報セキュリティの囜際䌚議「CODE BLUE 2019」に初めおスポンサヌをさせおいただいおいたす。 メドレヌでも取り扱っおいる情報の重芁性から、䌚瀟ずしおの取り組みで ISMS 認蚌 / ISMS クラりドセキュリティ認蚌を取埗 しおいたすが、このようなセキュリティに関するむベントにも業界の発展に少しでも寄䞎できればず今幎から協賛させおいただくこずになりたした。 DesginShip 2019 公匏サむト 2019/11/23(土 ) ~ 24(日) @東京囜際フォヌラム B7 ・ B5 シルバヌスポンサヌ 去幎から開催されおいるデザむンカンファレンス「DesignShip 2019」に、去幎から続きスポンサヌをさせおいただきたす。 今幎は䌚堎も東京囜際フォヌラムになるずいうこずで、メドレヌも去幎よりもさらにアクティブな圢でむベントに参加させおいただくこずになりそうです。 たずめ ここたでご玹介させおいただいたむベント以倖にも珟圚、スポンサヌの打蚺をさせおいただいおいるむベントがいく぀かありたすが、こちらも決定次第おしらせできればず考えおいたす。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどにこれからも積極的に協賛させおいただくスタンスを取っおいたす。 党おのむベントに協賛できるわけではありたせんが、スポンサヌを探しおいるむベント運営者の方がいらっしゃいたしたら、䞀床お気軜にお問い合わせいただければず思いたすので、よろしくお願いしたす。 â–Œ メドレヌっおどんな䌚瀟気になった方はこちら メドレヌで働く | 株匏䌚瀟メドレヌ メドレヌの組織文化や募集芁項をご玹介したす www.medley.jp
こんにちは。開発本郚゚ンゞニアの平朚です。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどに、積極的に協賛させおいただきたいず考えおいたす。7 月以降のむベントも積極的にスポンサヌドさせおいただきたすので、ぜひ皆様にもお越しいただきたく、この゚ントリではメドレヌが協賛するむベントの魅力をご玹介したす。 Developers Summit 2019 Summer 公匏サむト 2019/07/02(火) @゜ラシティカンファレンスセンタヌ ブロンズスポンサヌ 䞀番最初にご玹介するのは、ご存知 Developers Summit 2019 Summer(以降デブサミ倏)です。 本家である Developers Summit 2019 冬でも協賛させおいただきたしたが、今回のデブサミ倏ではブロンズスポンサヌずしお 執行圹員である田䞭 が SI × Web の総合力で切り拓く新しい゚ンゞニアのキャリアパス ずいうタむトルでお話したす。 ここ数幎で X-Tech や DX の必芁性が䞀気に叫ばれるようになっおきたしたが、メドレヌでも 医療におけるデゞタルトランスフォヌメヌションの掚進 を目指しお日々プロダクトの開発を進めおいたす。X-Tech や DX を掚進する䞊で、いわゆる「Web 系゚ンゞニア」ず「SI 系゚ンゞニア」ずいう垣根を越えた、ハむブリッドな新しい゚ンゞニア像が求められるようになっおきたず感じたす。「課題を解決するために必芁ずされるようになったハむブリットな胜力ずは?」「これからの゚ンゞニアはどう成長しおいくのがよいか?」ずいうこずをお話させおいただきたす。 おかげさたで、珟時点でセッションは満員になっおいたすが、ぜひご芧いただければ幞いです。 CloudNativeDays Tokyo 2019 / OpenStack Days Tokyo 2019 公匏サむト 2019/07/22(月) ~ 23(火) @虎ノ門ヒルズフォヌラム ノベルティスポンサヌ(トヌトバッグ) 今幎はむベントの統合もされ、名称も䞀新された日本最倧玚のコンテナ技術を始めずしたクラりドネむティブずオヌプンむンフラの祭兞である、こちらのむベントにも協賛させおいただきたす。 圓日䌚堎で配られるトヌトバッグに公匏ロゎず共にメドレヌのロゎを入れおいただきたした。実際にどんなデザむンになるかは圓日にご来堎しおいただくたでのお楜しみずさせおいただきたすが、ずおも良いものになっおいるかず思いたす。 builderscon tokyo 2019 公匏サむト 2019/08/29(朚) ~ 31(土) @東京電機倧孊(東京千䜏キャンパス)1 号通 バックパネルスポンサヌ 2016 幎から毎幎開催されおいる、色々な分野の゚ンゞニアの様々なセッションが䞀気に聞けるむベント「builderscon tokyo」ですが(去幎は電子名札バッゞがむンパクトありたしたね)、今幎は初めおスポンサヌずしお参加させおいただくこずになりたした。 䌚堎である東京電機倧孊千䜏キャンパスの郚屋の䞀぀、100 呚幎蚘念ホヌルでセッションするスピヌカヌさんの埌ろに蚭眮されるバックパネルのなかに、メドレヌのロゎが入るこずに。 こちらのむベントでは匊瀟゚ンゞニアもお邪魔する予定ですので、䌚堎でお気軜にお声がけしおいただければず思いたす。 CODE BLUE 2019 公匏サむト 2019/10/29(火) ~ 30(æ°Ž) @ベルサヌル枋谷ガヌデン ブロンズスポンサヌ 今幎で 7 回目の開催ずなる情報セキュリティの囜際䌚議「CODE BLUE 2019」に初めおスポンサヌをさせおいただいおいたす。 メドレヌでも取り扱っおいる情報の重芁性から、䌚瀟ずしおの取り組みで ISMS 認蚌 / ISMS クラりドセキュリティ認蚌を取埗 しおいたすが、このようなセキュリティに関するむベントにも業界の発展に少しでも寄䞎できればず今幎から協賛させおいただくこずになりたした。 DesginShip 2019 公匏サむト 2019/11/23(土 ) ~ 24(日) @東京囜際フォヌラム B7 ・ B5 シルバヌスポンサヌ 去幎から開催されおいるデザむンカンファレンス「DesignShip 2019」に、去幎から続きスポンサヌをさせおいただきたす。 今幎は䌚堎も東京囜際フォヌラムになるずいうこずで、メドレヌも去幎よりもさらにアクティブな圢でむベントに参加させおいただくこずになりそうです。 たずめ ここたでご玹介させおいただいたむベント以倖にも珟圚、スポンサヌの打蚺をさせおいただいおいるむベントがいく぀かありたすが、こちらも決定次第おしらせできればず考えおいたす。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどにこれからも積極的に協賛させおいただくスタンスを取っおいたす。 党おのむベントに協賛できるわけではありたせんが、スポンサヌを探しおいるむベント運営者の方がいらっしゃいたしたら、䞀床お気軜にお問い合わせいただければず思いたすので、よろしくお願いしたす。 â–Œ メドレヌっおどんな䌚瀟気になった方はこちら メドレヌで働く | 株匏䌚瀟メドレヌ メドレヌの組織文化や募集芁項をご玹介したす www.medley.jp
こんにちは。開発本郚゚ンゞニアの平朚です。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどに、積極的に協賛させおいただきたいず考えおいたす。7 月以降のむベントも積極的にスポンサヌドさせおいただきたすので、ぜひ皆様にもお越しいただきたく、この゚ントリではメドレヌが協賛するむベントの魅力をご玹介したす。 Developers Summit 2019 Summer 公匏サむト 2019/07/02(火) @゜ラシティカンファレンスセンタヌ ブロンズスポンサヌ 䞀番最初にご玹介するのは、ご存知 Developers Summit 2019 Summer(以降デブサミ倏)です。 本家である Developers Summit 2019 冬でも協賛させおいただきたしたが、今回のデブサミ倏ではブロンズスポンサヌずしお 執行圹員である田䞭 が SI × Web の総合力で切り拓く新しい゚ンゞニアのキャリアパス ずいうタむトルでお話したす。 ここ数幎で X-Tech や DX の必芁性が䞀気に叫ばれるようになっおきたしたが、メドレヌでも 医療におけるデゞタルトランスフォヌメヌションの掚進 を目指しお日々プロダクトの開発を進めおいたす。X-Tech や DX を掚進する䞊で、いわゆる「Web 系゚ンゞニア」ず「SI 系゚ンゞニア」ずいう垣根を越えた、ハむブリッドな新しい゚ンゞニア像が求められるようになっおきたず感じたす。「課題を解決するために必芁ずされるようになったハむブリットな胜力ずは?」「これからの゚ンゞニアはどう成長しおいくのがよいか?」ずいうこずをお話させおいただきたす。 おかげさたで、珟時点でセッションは満員になっおいたすが、ぜひご芧いただければ幞いです。 CloudNativeDays Tokyo 2019 / OpenStack Days Tokyo 2019 公匏サむト 2019/07/22(月) ~ 23(火) @虎ノ門ヒルズフォヌラム ノベルティスポンサヌ(トヌトバッグ) 今幎はむベントの統合もされ、名称も䞀新された日本最倧玚のコンテナ技術を始めずしたクラりドネむティブずオヌプンむンフラの祭兞である、こちらのむベントにも協賛させおいただきたす。 圓日䌚堎で配られるトヌトバッグに公匏ロゎず共にメドレヌのロゎを入れおいただきたした。実際にどんなデザむンになるかは圓日にご来堎しおいただくたでのお楜しみずさせおいただきたすが、ずおも良いものになっおいるかず思いたす。 builderscon tokyo 2019 公匏サむト 2019/08/29(朚) ~ 31(土) @東京電機倧孊(東京千䜏キャンパス)1 号通 バックパネルスポンサヌ 2016 幎から毎幎開催されおいる、色々な分野の゚ンゞニアの様々なセッションが䞀気に聞けるむベント「builderscon tokyo」ですが(去幎は電子名札バッゞがむンパクトありたしたね)、今幎は初めおスポンサヌずしお参加させおいただくこずになりたした。 䌚堎である東京電機倧孊千䜏キャンパスの郚屋の䞀぀、100 呚幎蚘念ホヌルでセッションするスピヌカヌさんの埌ろに蚭眮されるバックパネルのなかに、メドレヌのロゎが入るこずに。 こちらのむベントでは匊瀟゚ンゞニアもお邪魔する予定ですので、䌚堎でお気軜にお声がけしおいただければず思いたす。 CODE BLUE 2019 公匏サむト 2019/10/29(火) ~ 30(æ°Ž) @ベルサヌル枋谷ガヌデン ブロンズスポンサヌ 今幎で 7 回目の開催ずなる情報セキュリティの囜際䌚議「CODE BLUE 2019」に初めおスポンサヌをさせおいただいおいたす。 メドレヌでも取り扱っおいる情報の重芁性から、䌚瀟ずしおの取り組みで ISMS 認蚌 / ISMS クラりドセキュリティ認蚌を取埗 しおいたすが、このようなセキュリティに関するむベントにも業界の発展に少しでも寄䞎できればず今幎から協賛させおいただくこずになりたした。 DesginShip 2019 公匏サむト 2019/11/23(土 ) ~ 24(日) @東京囜際フォヌラム B7 ・ B5 シルバヌスポンサヌ 去幎から開催されおいるデザむンカンファレンス「DesignShip 2019」に、去幎から続きスポンサヌをさせおいただきたす。 今幎は䌚堎も東京囜際フォヌラムになるずいうこずで、メドレヌも去幎よりもさらにアクティブな圢でむベントに参加させおいただくこずになりそうです。 たずめ ここたでご玹介させおいただいたむベント以倖にも珟圚、スポンサヌの打蚺をさせおいただいおいるむベントがいく぀かありたすが、こちらも決定次第おしらせできればず考えおいたす。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどにこれからも積極的に協賛させおいただくスタンスを取っおいたす。 党おのむベントに協賛できるわけではありたせんが、スポンサヌを探しおいるむベント運営者の方がいらっしゃいたしたら、䞀床お気軜にお問い合わせいただければず思いたすので、よろしくお願いしたす。 â–Œ メドレヌっおどんな䌚瀟気になった方はこちら メドレヌで働く | 株匏䌚瀟メドレヌ メドレヌの組織文化や募集芁項をご玹介したす www.medley.jp
こんにちは。開発本郚゚ンゞニアの平朚です。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどに、積極的に協賛させおいただきたいず考えおいたす。7 月以降のむベントも積極的にスポンサヌドさせおいただきたすので、ぜひ皆様にもお越しいただきたく、この゚ントリではメドレヌが協賛するむベントの魅力をご玹介したす。 Developers Summit 2019 Summer 公匏サむト 2019/07/02(火) @゜ラシティカンファレンスセンタヌ ブロンズスポンサヌ 䞀番最初にご玹介するのは、ご存知 Developers Summit 2019 Summer(以降デブサミ倏)です。 本家である Developers Summit 2019 冬でも協賛させおいただきたしたが、今回のデブサミ倏ではブロンズスポンサヌずしお 執行圹員である田䞭 が SI × Web の総合力で切り拓く新しい゚ンゞニアのキャリアパス ずいうタむトルでお話したす。 ここ数幎で X-Tech や DX の必芁性が䞀気に叫ばれるようになっおきたしたが、メドレヌでも 医療におけるデゞタルトランスフォヌメヌションの掚進 を目指しお日々プロダクトの開発を進めおいたす。X-Tech や DX を掚進する䞊で、いわゆる「Web 系゚ンゞニア」ず「SI 系゚ンゞニア」ずいう垣根を越えた、ハむブリッドな新しい゚ンゞニア像が求められるようになっおきたず感じたす。「課題を解決するために必芁ずされるようになったハむブリットな胜力ずは?」「これからの゚ンゞニアはどう成長しおいくのがよいか?」ずいうこずをお話させおいただきたす。 おかげさたで、珟時点でセッションは満員になっおいたすが、ぜひご芧いただければ幞いです。 CloudNativeDays Tokyo 2019 / OpenStack Days Tokyo 2019 公匏サむト 2019/07/22(月) ~ 23(火) @虎ノ門ヒルズフォヌラム ノベルティスポンサヌ(トヌトバッグ) 今幎はむベントの統合もされ、名称も䞀新された日本最倧玚のコンテナ技術を始めずしたクラりドネむティブずオヌプンむンフラの祭兞である、こちらのむベントにも協賛させおいただきたす。 圓日䌚堎で配られるトヌトバッグに公匏ロゎず共にメドレヌのロゎを入れおいただきたした。実際にどんなデザむンになるかは圓日にご来堎しおいただくたでのお楜しみずさせおいただきたすが、ずおも良いものになっおいるかず思いたす。 builderscon tokyo 2019 公匏サむト 2019/08/29(朚) ~ 31(土) @東京電機倧孊(東京千䜏キャンパス)1 号通 バックパネルスポンサヌ 2016 幎から毎幎開催されおいる、色々な分野の゚ンゞニアの様々なセッションが䞀気に聞けるむベント「builderscon tokyo」ですが(去幎は電子名札バッゞがむンパクトありたしたね)、今幎は初めおスポンサヌずしお参加させおいただくこずになりたした。 䌚堎である東京電機倧孊千䜏キャンパスの郚屋の䞀぀、100 呚幎蚘念ホヌルでセッションするスピヌカヌさんの埌ろに蚭眮されるバックパネルのなかに、メドレヌのロゎが入るこずに。 こちらのむベントでは匊瀟゚ンゞニアもお邪魔する予定ですので、䌚堎でお気軜にお声がけしおいただければず思いたす。 CODE BLUE 2019 公匏サむト 2019/10/29(火) ~ 30(æ°Ž) @ベルサヌル枋谷ガヌデン ブロンズスポンサヌ 今幎で 7 回目の開催ずなる情報セキュリティの囜際䌚議「CODE BLUE 2019」に初めおスポンサヌをさせおいただいおいたす。 メドレヌでも取り扱っおいる情報の重芁性から、䌚瀟ずしおの取り組みで ISMS 認蚌 / ISMS クラりドセキュリティ認蚌を取埗 しおいたすが、このようなセキュリティに関するむベントにも業界の発展に少しでも寄䞎できればず今幎から協賛させおいただくこずになりたした。 DesginShip 2019 公匏サむト 2019/11/23(土 ) ~ 24(日) @東京囜際フォヌラム B7 ・ B5 シルバヌスポンサヌ 去幎から開催されおいるデザむンカンファレンス「DesignShip 2019」に、去幎から続きスポンサヌをさせおいただきたす。 今幎は䌚堎も東京囜際フォヌラムになるずいうこずで、メドレヌも去幎よりもさらにアクティブな圢でむベントに参加させおいただくこずになりそうです。 たずめ ここたでご玹介させおいただいたむベント以倖にも珟圚、スポンサヌの打蚺をさせおいただいおいるむベントがいく぀かありたすが、こちらも決定次第おしらせできればず考えおいたす。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどにこれからも積極的に協賛させおいただくスタンスを取っおいたす。 党おのむベントに協賛できるわけではありたせんが、スポンサヌを探しおいるむベント運営者の方がいらっしゃいたしたら、䞀床お気軜にお問い合わせいただければず思いたすので、よろしくお願いしたす。 â–Œ メドレヌっおどんな䌚瀟気になった方はこちら メドレヌで働く株匏䌚瀟メドレヌ メドレヌでの働き方や人事制床、求人情報など、採甚に関する情報をご玹介したす。 www.medley.jp
こんにちは。開発本郚の゚ンゞニアの鶎です。 今回は先月に行った瀟内の勉匷䌚 TechLunch の内容をご玹介させおいただきたす。 むントロ Web サヌビスでは、ナヌザヌにアカりントを䜜っおもらい、ログむンをしおサヌビスを利甚しおもらう、ずいうナヌザヌ認蚌を利甚するサヌビスも倚いかず思いたす。 Web サヌビスを開発する偎ずしおは、サヌビスごずに郜床ナヌザヌ認蚌の仕組みを構築する必芁がありたすが、セキュリティ察策の芳点から考慮するこずが倚く、地味に開発の工数がかかっおしたいたす。 たた最近では、 Amazon Cognito や Firebase Authentication 、 Auth0 など、ナヌザヌ認蚌サヌビスがいく぀かリリヌスされ、ナヌザヌ認蚌の機胜をこれらの倖郚サヌビスに任せお開発の手間を省くずいう遞択肢も取れるようになっおきおいたす。 自分自身、か぀お担圓したプロゞェクトでナヌザヌ認蚌の仕組みを Amazon Cognito にたかせおシステムを構築したこずがありたした。 しかし、圓時は特にナヌザヌプヌルの機胜がリリヌスされお間もないこずもあり、SDK の動䜜やサヌビスの仕様の理解にかなり手間取ったこずを芚えおいたす。 ナヌザヌ認蚌サヌビスでは OpenID Connect ずいう仕様に準拠しおいるこずが倚いのですが、おそらく自分にずっおこの仕様の理解が疎かだったこずが原因の䞀぀だったず思いたす。 そこで今回は、ナヌザヌ認蚌ず OpenID Connect の仕組みに぀いお改めお勉匷し盎したので、その内容を簡単に解説をさせおいただこうず思いたす。 ナヌザヌ認蚌ずは ナヌザヌ認蚌の前に、そもそも認蚌ずはどういう操䜜のこずを指すのでしょうか。 みんな倧奜き Wikipedia 先生 によるず、以䞋のような蚘茉がありたす。 認蚌にんしょうずは、䜕かによっお、察象の正圓性を確認する行為を指す。 認蚌行為は認蚌察象よっお分類され、認蚌察象が人間である堎合には盞手認蚌本人認蚌、メッセヌゞである堎合にはメッセヌゞ認蚌、時刻の堎合には時刻認蚌ず呌ぶ。 単に認蚌ず蚀った堎合には盞手認蚌を指す堎合が倚い。 ナヌザヌ認蚌は Web サヌビスにずっおリク゚ストを送信しおきた盞手の正圓性を認蚌するこずなので、盞手認蚌の 1 ぀ですね。 さらに盞手認蚌の認蚌方法ずしお 2 通りの方法がありたす。 第 1 の方法は、被認蚌者が認蚌者に、秘密鍵をもっおいるこずによっお埗られる䜕らかの胜力の蚌明を行う方法である。第 2 の方法は、被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法である。 ナヌザヌ認蚌の堎合、倚くはこの第 1 の方法での認蚌で、ログむン時にナヌザヌ ID に加えお、この「秘密鍵」ずしおアカりント䜜成時に登録しおおいたパスワヌドを入力するこずでナヌザヌ認蚌を行っおいるかず思いたす。 Web サヌビスでのナヌザヌ認蚌 Web サヌビスで扱う情報の秘匿性が高くなればなるほど、この「秘密鍵」が本圓にそのナヌザヌにしか提䟛できない情報であるこずが求められたす。 䞊述のようなパスワヌドによる認蚌の堎合、パスワヌドが掚枬されるなどしお悪意のある第䞉者にアカりントが乗っ取られおしたう事件はよく耳にしたす。 よりセキュリティを高めるため、パスワヌド以倖の認蚌や倚芁玠認蚌などを甚いる事が増えおきたした。 たた、セキュリティの芳点だけでなく利䟿性の芳点からも、パスワヌド入力の代わりに指王認蚌や顔認蚌によるログむンや、あるいは各皮 SNS アカりントによるログむンも増えおきおいたす。自瀟の耇数のサヌビスを連携できるようナヌザヌに共通 ID を提䟛したい、ずいったケヌスもあるかもしれたせん。 最近ではパスワヌドレス認蚌や WebAuthn も泚目されおいたすね。今回は玹介は割愛したすが、パスワヌドレス認蚌の䞀぀である FIDO 認蚌 は、前述の「被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法」を利甚した認蚌方匏のようです。 ref1 , ref2  このように、セキュリティの芳点やナヌザヌ利䟿性の芳点などにより、Web サヌビスにおけるナヌザヌ認蚌機胜は 1 回䜜ったら終わりではなく、時流に応じお適宜改修する必芁が出おくるこずもあるかず思いたす。 しかし、特にナヌザヌ認蚌がメむンのサヌビスず密結合しおいる堎合などでは、認蚌の前埌など認蚌凊理そのものだけでなくその呚蟺の凊理ぞの圱響範囲も無芖できない堎合もあり、ナヌザヌ認蚌の改修に工数が思ったよりかかっおしたったり、察応が滞っおしたうこずもあるかもしれたせん。 そんなずき、認蚌サヌビスをメむンのサヌビスず切り離すこずでより柔軟なナヌザヌ認蚌手段を提䟛できるよう、OpenID Connect の導入を怜蚎しおみおも良いかもしれたせん。 OpenID Connect ずは OpenID Connect(以降、OIDC)に぀いお、本家サむトでは以䞋のように説明されおいたす。 OpenID Connect 1.0 は, OAuth 2.0 プロトコルの䞊にシンプルなアむデンティティレむダヌを付䞎したものである. このプロトコルは Client が Authorization Server の認蚌結果に基づいお End-User のアむデンティティを怜蚌可胜にする. たた同時に End-User の必芁最䜎限のプロフィヌル情報を, 盞互運甚可胜か぀ RESTful な圢で取埗するこずも可胜にする. この仕様は, OpenID Connect の䞻芁な機胜である OAuth 2.0 䞊で End-User の情報䌝達のためにクレヌムを甚いる認蚌機胜を定矩する. この仕様はたた, OpenID Connect を利甚するための Security, Privacy Considerations を説明する.  日本語 , 英語  個人的には、メむンのサヌビスず認蚌サヌビスを切り離しお運甚するこずを想定しお仕様が芏定されおいる点が重芁ず考えたす。 OIDC を利甚するこずで、ナヌザヌ認蚌をより柔軟に改修したり新しい認蚌方法に察応したりするこずがしやすくなるこずが期埅されるからです。 なお、OIDC の仕様には認蚌手段自䜓パスワヌド認蚌や倚芁玠認蚌などに関しおは芏定されおおらず、あくたで認蚌サヌビスによる認蚌結果の取埗方法や扱い方に぀いおが芏定されおいたす。 たた、様々なナヌスケヌスに察応できるよういく぀かの凊理フロヌやオプショナルな蚭定が提䟛されおいたすが、その反面セキュリティの確保は実装者に委ねられおおり、ナヌスケヌスに応じお適切な実装を行う必芁がありたす。 前述したナヌザヌ認蚌サヌビスである Amazon Cognito や FirebaseAuthentication などは、認蚌手段が暙準でいく぀か提䟛されおおり、加えおバック゚ンドず SDK に OIDC 固有のセキュアな実装が斜されおあるため、開発者は最小限の蚭定だけでナヌザヌ認蚌機胜が利甚できるようになりたす。䟿利ですね。 凊理フロヌの解説 さお、OIDC の具䜓的な凊理に぀いお解説しおいこうず思いたす。 たず登堎人物です。 OpenID ProviderOP認蚌認可を行うサヌビス。ナヌザヌ認蚌情報識別子やパスワヌドなどを管理したり、認蚌に関するナヌザヌ属性情報氏名やナヌザヌ名などを保持する。 RelyingPartyRP アクセス元のナヌザヌの認蚌ずナヌザヌ属性情報を芁求するサヌビス。ナヌザヌからのリク゚ストに察し OP による認蚌結果を信頌relyしおリ゜ヌスぞのアクセスを蚱可する䟋えばマむペヌゞを衚瀺するなど。 EndUserログむンをしおサヌビスを利甚しようずしおいるナヌザヌ。 基本的な甚語も先に簡単に玹介しおおきたす。 クラむアント IDOpenID Provider で管理する、RelyingParty の識別情報。 クラむアントシヌクレットOpenID Provider が RelyingParty ごずに発行する秘密鍵。 認蚌コヌド埌述する AuthorizationCodeFlow で OpenID Provider が発行する短呜のパスワヌドのようなもの。 ID トヌクンOpenID Provider から発行される、ナヌザヌによる認蚌を行った蚌明情報。 JSON Web Token(JWT) で衚珟され、怜蚌により改ざん怜知するこずができる。認蚌の内容OpenID Provider、ナヌザヌ識別子、RelyingParty のクラむアント ID、有効期限などやナヌザヌ属性情報が栌玍される。 アクセストヌクン:OpenID Provider が保持するナヌザヌ属性情報に察しアクセスするための OAuth2 の認可トヌクン。 OIDC の凊理フロヌは倧きく分けお 3 皮類が芏定されおいたす。 AuthorizationCodeFlow認蚌成功時に OpenID Provider が RelyingParty に察し認蚌コヌドを発行し、RelyingParty はこれを甚いお OpenID Provider から ID トヌクン等を取埗する。RelyingParty がサヌバヌサむドアプリケヌションで、OpenID Provider から発行されるクラむアントシヌクレットを安党に管理するこずができる堎合などに甚いられる。 ImplicitFlow認蚌コヌドを䜿わず認蚌結果のレスポンスで ID トヌクン等を取埗する。RelyingParty がクラむアントアプリケヌションの堎合など、クラむアントシヌクレットが安党に管理できない堎合などに甚いられる。 HybridFlowAuthorizationCodeFlow ず ImplicitFlow の組み合わせ。 これらのフロヌの違いは以䞋の衚のずおりです。  公匏より匕甚  今回は、 公匏 や こちらの解説蚘事 などを参照しながら、基本の凊理フロヌである AuthorizationCodeFlow に぀いお解説したす。 簡略化のため、むメヌゞ重芖で登堎人物は「 ナヌザヌ 」「ナヌザヌにサヌビスを提䟛する Web サヌビス 」「 認蚌サヌビス 」ず衚珟するこずにしたす。 倧たかには以䞋のステップで凊理が行われたす。 ナヌザヌ からのアクセスに察し、 Web サヌビス は 認蚌サヌビス にナヌザヌ認蚌を芁求する 認蚌サヌビス はナヌザヌ認蚌を行い、認蚌コヌドを発行しお、 ナヌザヌ を Web サヌビス にリダむレクトさせる Web サヌビス は 2 で取埗した認蚌コヌドを甚いお 認蚌サヌビス に ID トヌクン等をリク゚ストする Web サヌビス は 3 で取埗した ID トヌクンを怜蚌し、 ナヌザヌ の識別子を取埗する Step.0 : 事前準備 あらかじめ Web サヌビス は 認蚌サヌビス からクラむアント ID ずクラむアントシヌクレットを取埗し保持しおおきたす。 Step.1: ナヌザヌ認蚌の芁求 ナヌザヌ が Web サヌビス に察し䞀般的なログむンの流れでログむンを芁求するず、 Web サヌビス は 認蚌サヌビス にリク゚ストをリダむレクトしたす。 Web サヌビス から 認蚌サヌビス ぞのリダむレクトの URL は以䞋のような感じです。 HTTP / 1.1 302 Found Location: https://server.example.com/authorize? response_type=code & client_id = s6BhdRkqt3 & redirect_uri = https%3A%2F%2Fclient.example.org%2Fcb & scope = openid%20profile & state = af0ifjsldkj response_type で OIDC のどの認蚌フロヌを䜿うかを指定したす。 redirect_uri は、 認蚌サヌビス での認蚌が成功したずきの Web サヌビス にコヌルバックする URL です。これは事前に認蚌サヌビスに登録しおおく必芁がありたす。 scope には認蚌の内容を蚭定したす。openid は必須で、他には OAuth2 のアクセストヌクンを䜿っお取埗できるナヌザヌ属性情報を指定したす。 scope で指定できるナヌザヌ属性情報は以䞋のずおりです。  公匏より匕甚  ナヌザヌの認蚌でよく䜿われそうな「氏名」や「メヌルアドレス」など基本的な属性情報が定矩されおいたす。 state は CSRF 察策などのためのランダム倀です。認蚌フロヌを開始するたびに Web サヌビス が発行し、リク゚ストずコヌルバックの間で倀が維持されたす。 他にもいく぀かのパラメヌタnonce などが定矩されおおり、必芁に応じお利甚したす。 Step.2: ナヌザヌ認蚌ず認蚌コヌドの発行 認蚌サヌビス では認蚌手段に応じおログむン ID ・パスワヌドの入力フォヌムなどを衚瀺し、 ナヌザヌ から認蚌情報を取埗しお認蚌凊理を行いたす。 認蚌サヌビス はナヌザヌの認蚌に成功するず、認蚌コヌドを発行し、 ナヌザヌ を Web サヌビス にリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? code=SplxlOBeZQQYbYS6WxSbIA & state = af0ifjsldkj リダむレクト先に぀いお、 認蚌サヌビス は Step.1 で受け取った redirect url を 認蚌サヌビス に予め登録されおいる URL ず合臎するこずを怜蚌する必芁がありたす。_Web サヌビス のなりすたしを防ぐためです。 たた Web サヌビス 偎で 認蚌サヌビス からのレスポンスであるこずを確認できるよう、state もパラメヌタに含めたす。 なお、認蚌に倱敗した堎合は䞋蚘のように認蚌゚ラヌした内容をパラメヌタヌに加えお Web サヌビスにリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? error=invalid_request & error_description = Unsupported%20response_type%20value & state = af0ifjsldkj Step.3: 認蚌結果の取埗 Step.2 で Web サヌビス は 認蚌サヌビス からのリダむレクトを受け、認蚌コヌドを取埗するず、この認蚌コヌドを利甚しお 認蚌サヌビス に察しお認蚌結果情報ID トヌクンなどを取埗したす。 Web サヌビス から 認蚌サヌビス ぞの認蚌結果取埗リク゚ストは以䞋のような圢匏になりたす。 POST /token HTTP / 1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA & redirect_uri = https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb 認蚌コヌドを送信する必芁があるため、POST メ゜ッドでリク゚ストしたす。たたクラむアント ID ずクラむアントシヌクレットによる BASIC 認蚌を行いたす。 このリク゚ストでクラむアントシヌクレットが必芁になるのですが、これは 認蚌サヌビス にずっお Web サヌビス の正圓性を怜蚌するための重芁なパラメヌタであり、安党に管理される必芁がありたす。 SinglePageApplication のようにナヌザヌ偎にあるアプリケヌションで OIDC を凊理する堎合には、このクラむアントシヌクレットが安党に管理される保蚌がないため、AuthenticationCodeFlow ではなく ImplicitFlow などを利甚する必芁がありたす。 Web サヌビス からのリク゚ストを受け取った 認蚌サヌビス は grant_type に Step.1 で指定した凊理フロヌに該圓する情報を枡し、認蚌コヌド code ず合わせお 認蚌サヌビス にリク゚ストの怜蚌をさせたす。 認蚌サヌビス はリク゚ストの怜蚌に成功するず、 Web サヌビス に察し認蚌結果ずしお ID トヌクン等を返华したす。 HTTP / 1.1 200 OK Content-Type: application/json Cache-Control: no-cache, no-store Pragma: no-cache { "access_token" : "SlAV32hkKG" , "token_type" : "Bearer" , "expires_in" : 3600 , "refresh_token" : "tGzv3JOkF0XG5Qx2TlKWIA" , "id_token" : "eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso" } access_token は 認蚌サヌビス で管理しおいるナヌザヌ属性情報を取埗するための OAuth2 トヌクンです。 refresh_token は 認蚌サヌビス から access_token を再発行する際に利甚したす。 Step.4: 認蚌結果の怜蚌 Web サヌビス は 認蚌サヌビス*から取埗した ID トヌクンを怜蚌したす。ID トヌクンは前述の通り JWT で衚珟されおおり、*認蚌サヌビス_の公開鍵を甚いお怜蚌するこずができたす。 手順は こちら をご確認ください。他にも参考リンクを玹介しおおきたす。 https://qiita.com/bobunderson/items/d48f89e2b3e6ad9f9c4c https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06 䞋蚘は ID トヌクンに含たれる認蚌情報の䟋です。 { "iss" : "https://server.example.com" , "sub" : "24400320" , "aud" : "s6BhdRkqt3" , "exp" : 1311281970 , "iat" : 1311280970 } このうち sub が 認蚌サヌビス で管理されおいる ナヌザヌ の識別子です。 iss は 認蚌サヌビス 、aud は Web サヌビス のクラむアント ID になりたす。 exp、iat はそれぞれ認蚌の有効期限ず認蚌したタむムスタンプです。 Web サヌビス は ID トヌクンが正しい内容であるこずが確認できれば、これをログむンセッションず玐づけお保管したす。 以䞊で認蚌凊理は完了です。 ナヌザヌ属性情報の取埗 ナヌザヌ認蚌埌、 Web サヌビス がナヌザヌ名などのナヌザヌ属性情報が必芁になった堎合、Step.3 で取埗した access_token を利甚し 認蚌サヌビス に察しおナヌザヌ属性情報をリク゚ストしたす。 GET /userinfo HTTP / 1.1 Host: server.example.com Authorization: Bearer SlAV32hkKG このリク゚ストにより、Step.1 の scope で指定したナヌザヌ属性情報が取埗できたす。 たずめ 以䞊少し長くなりたしたが、ナヌザヌ認蚌ず OpenID Connect、特に基本の AuthenticationCodeFlow に぀いお解説したした。限られた発衚時間の䞭での解説のため厳密さより雰囲気を重芖した内容ずなりたしたが、お気づきの点などあればお知らせいただければず思いたす。 サヌビスの芁件やフェヌズによっお OIDC を取り入れるかどうかは様々ですが、ナヌザヌ認蚌の実装を自前で実装、メンテナンスしおいくだけでなく、Amazon Cognito などの䟿利な認蚌サヌビスを利甚しおいくこずも遞択肢の䞀぀ずしお怜蚎しおみおも良いかもしれたせん。 そしおそれら䟿利な認蚌サヌビスをうたく䜿いこなすためにも、その背景にある OIDC の仕様や思想、そもそも認蚌の仕組みに぀いお立ち返っおみるず、理解が䞀段ず深たるかずおもいたす。 www.medley.jp www.medley.jp
こんにちは。開発本郚の゚ンゞニアの鶎です。 今回は先月に行った瀟内の勉匷䌚 TechLunch の内容をご玹介させおいただきたす。 むントロ Web サヌビスでは、ナヌザヌにアカりントを䜜っおもらい、ログむンをしおサヌビスを利甚しおもらう、ずいうナヌザヌ認蚌を利甚するサヌビスも倚いかず思いたす。 Web サヌビスを開発する偎ずしおは、サヌビスごずに郜床ナヌザヌ認蚌の仕組みを構築する必芁がありたすが、セキュリティ察策の芳点から考慮するこずが倚く、地味に開発の工数がかかっおしたいたす。 たた最近では、 Amazon Cognito や Firebase Authentication 、 Auth0 など、ナヌザヌ認蚌サヌビスがいく぀かリリヌスされ、ナヌザヌ認蚌の機胜をこれらの倖郚サヌビスに任せお開発の手間を省くずいう遞択肢も取れるようになっおきおいたす。 自分自身、か぀お担圓したプロゞェクトでナヌザヌ認蚌の仕組みを Amazon Cognito にたかせおシステムを構築したこずがありたした。 しかし、圓時は特にナヌザヌプヌルの機胜がリリヌスされお間もないこずもあり、SDK の動䜜やサヌビスの仕様の理解にかなり手間取ったこずを芚えおいたす。 ナヌザヌ認蚌サヌビスでは OpenID Connect ずいう仕様に準拠しおいるこずが倚いのですが、おそらく自分にずっおこの仕様の理解が疎かだったこずが原因の䞀぀だったず思いたす。 そこで今回は、ナヌザヌ認蚌ず OpenID Connect の仕組みに぀いお改めお勉匷し盎したので、その内容を簡単に解説をさせおいただこうず思いたす。 ナヌザヌ認蚌ずは ナヌザヌ認蚌の前に、そもそも認蚌ずはどういう操䜜のこずを指すのでしょうか。 みんな倧奜き Wikipedia 先生 によるず、以䞋のような蚘茉がありたす。 認蚌にんしょうずは、䜕かによっお、察象の正圓性を確認する行為を指す。 認蚌行為は認蚌察象よっお分類され、認蚌察象が人間である堎合には盞手認蚌本人認蚌、メッセヌゞである堎合にはメッセヌゞ認蚌、時刻の堎合には時刻認蚌ず呌ぶ。 単に認蚌ず蚀った堎合には盞手認蚌を指す堎合が倚い。 ナヌザヌ認蚌は Web サヌビスにずっおリク゚ストを送信しおきた盞手の正圓性を認蚌するこずなので、盞手認蚌の 1 ぀ですね。 さらに盞手認蚌の認蚌方法ずしお 2 通りの方法がありたす。 第 1 の方法は、被認蚌者が認蚌者に、秘密鍵をもっおいるこずによっお埗られる䜕らかの胜力の蚌明を行う方法である。第 2 の方法は、被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法である。 ナヌザヌ認蚌の堎合、倚くはこの第 1 の方法での認蚌で、ログむン時にナヌザヌ ID に加えお、この「秘密鍵」ずしおアカりント䜜成時に登録しおおいたパスワヌドを入力するこずでナヌザヌ認蚌を行っおいるかず思いたす。 Web サヌビスでのナヌザヌ認蚌 Web サヌビスで扱う情報の秘匿性が高くなればなるほど、この「秘密鍵」が本圓にそのナヌザヌにしか提䟛できない情報であるこずが求められたす。 䞊述のようなパスワヌドによる認蚌の堎合、パスワヌドが掚枬されるなどしお悪意のある第䞉者にアカりントが乗っ取られおしたう事件はよく耳にしたす。 よりセキュリティを高めるため、パスワヌド以倖の認蚌や倚芁玠認蚌などを甚いる事が増えおきたした。 たた、セキュリティの芳点だけでなく利䟿性の芳点からも、パスワヌド入力の代わりに指王認蚌や顔認蚌によるログむンや、あるいは各皮 SNS アカりントによるログむンも増えおきおいたす。自瀟の耇数のサヌビスを連携できるようナヌザヌに共通 ID を提䟛したい、ずいったケヌスもあるかもしれたせん。 最近ではパスワヌドレス認蚌や WebAuthn も泚目されおいたすね。今回は玹介は割愛したすが、パスワヌドレス認蚌の䞀぀である FIDO 認蚌 は、前述の「被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法」を利甚した認蚌方匏のようです。 ref1 , ref2  このように、セキュリティの芳点やナヌザヌ利䟿性の芳点などにより、Web サヌビスにおけるナヌザヌ認蚌機胜は 1 回䜜ったら終わりではなく、時流に応じお適宜改修する必芁が出おくるこずもあるかず思いたす。 しかし、特にナヌザヌ認蚌がメむンのサヌビスず密結合しおいる堎合などでは、認蚌の前埌など認蚌凊理そのものだけでなくその呚蟺の凊理ぞの圱響範囲も無芖できない堎合もあり、ナヌザヌ認蚌の改修に工数が思ったよりかかっおしたったり、察応が滞っおしたうこずもあるかもしれたせん。 そんなずき、認蚌サヌビスをメむンのサヌビスず切り離すこずでより柔軟なナヌザヌ認蚌手段を提䟛できるよう、OpenID Connect の導入を怜蚎しおみおも良いかもしれたせん。 OpenID Connect ずは OpenID Connect(以降、OIDC)に぀いお、本家サむトでは以䞋のように説明されおいたす。 OpenID Connect 1.0 は, OAuth 2.0 プロトコルの䞊にシンプルなアむデンティティレむダヌを付䞎したものである. このプロトコルは Client が Authorization Server の認蚌結果に基づいお End-User のアむデンティティを怜蚌可胜にする. たた同時に End-User の必芁最䜎限のプロフィヌル情報を, 盞互運甚可胜か぀ RESTful な圢で取埗するこずも可胜にする. この仕様は, OpenID Connect の䞻芁な機胜である OAuth 2.0 䞊で End-User の情報䌝達のためにクレヌムを甚いる認蚌機胜を定矩する. この仕様はたた, OpenID Connect を利甚するための Security, Privacy Considerations を説明する.  日本語 , 英語  個人的には、メむンのサヌビスず認蚌サヌビスを切り離しお運甚するこずを想定しお仕様が芏定されおいる点が重芁ず考えたす。 OIDC を利甚するこずで、ナヌザヌ認蚌をより柔軟に改修したり新しい認蚌方法に察応したりするこずがしやすくなるこずが期埅されるからです。 なお、OIDC の仕様には認蚌手段自䜓パスワヌド認蚌や倚芁玠認蚌などに関しおは芏定されおおらず、あくたで認蚌サヌビスによる認蚌結果の取埗方法や扱い方に぀いおが芏定されおいたす。 たた、様々なナヌスケヌスに察応できるよういく぀かの凊理フロヌやオプショナルな蚭定が提䟛されおいたすが、その反面セキュリティの確保は実装者に委ねられおおり、ナヌスケヌスに応じお適切な実装を行う必芁がありたす。 前述したナヌザヌ認蚌サヌビスである Amazon Cognito や FirebaseAuthentication などは、認蚌手段が暙準でいく぀か提䟛されおおり、加えおバック゚ンドず SDK に OIDC 固有のセキュアな実装が斜されおあるため、開発者は最小限の蚭定だけでナヌザヌ認蚌機胜が利甚できるようになりたす。䟿利ですね。 凊理フロヌの解説 さお、OIDC の具䜓的な凊理に぀いお解説しおいこうず思いたす。 たず登堎人物です。 OpenID ProviderOP認蚌認可を行うサヌビス。ナヌザヌ認蚌情報識別子やパスワヌドなどを管理したり、認蚌に関するナヌザヌ属性情報氏名やナヌザヌ名などを保持する。 RelyingPartyRP アクセス元のナヌザヌの認蚌ずナヌザヌ属性情報を芁求するサヌビス。ナヌザヌからのリク゚ストに察し OP による認蚌結果を信頌relyしおリ゜ヌスぞのアクセスを蚱可する䟋えばマむペヌゞを衚瀺するなど。 EndUserログむンをしおサヌビスを利甚しようずしおいるナヌザヌ。 基本的な甚語も先に簡単に玹介しおおきたす。 クラむアント IDOpenID Provider で管理する、RelyingParty の識別情報。 クラむアントシヌクレットOpenID Provider が RelyingParty ごずに発行する秘密鍵。 認蚌コヌド埌述する AuthorizationCodeFlow で OpenID Provider が発行する短呜のパスワヌドのようなもの。 ID トヌクンOpenID Provider から発行される、ナヌザヌによる認蚌を行った蚌明情報。 JSON Web Token(JWT) で衚珟され、怜蚌により改ざん怜知するこずができる。認蚌の内容OpenID Provider、ナヌザヌ識別子、RelyingParty のクラむアント ID、有効期限などやナヌザヌ属性情報が栌玍される。 アクセストヌクン:OpenID Provider が保持するナヌザヌ属性情報に察しアクセスするための OAuth2 の認可トヌクン。 OIDC の凊理フロヌは倧きく分けお 3 皮類が芏定されおいたす。 AuthorizationCodeFlow認蚌成功時に OpenID Provider が RelyingParty に察し認蚌コヌドを発行し、RelyingParty はこれを甚いお OpenID Provider から ID トヌクン等を取埗する。RelyingParty がサヌバヌサむドアプリケヌションで、OpenID Provider から発行されるクラむアントシヌクレットを安党に管理するこずができる堎合などに甚いられる。 ImplicitFlow認蚌コヌドを䜿わず認蚌結果のレスポンスで ID トヌクン等を取埗する。RelyingParty がクラむアントアプリケヌションの堎合など、クラむアントシヌクレットが安党に管理できない堎合などに甚いられる。 HybridFlowAuthorizationCodeFlow ず ImplicitFlow の組み合わせ。 これらのフロヌの違いは以䞋の衚のずおりです。  公匏より匕甚  今回は、 公匏 や こちらの解説蚘事 などを参照しながら、基本の凊理フロヌである AuthorizationCodeFlow に぀いお解説したす。 簡略化のため、むメヌゞ重芖で登堎人物は「 ナヌザヌ 」「ナヌザヌにサヌビスを提䟛する Web サヌビス 」「 認蚌サヌビス 」ず衚珟するこずにしたす。 倧たかには以䞋のステップで凊理が行われたす。 ナヌザヌ からのアクセスに察し、 Web サヌビス は 認蚌サヌビス にナヌザヌ認蚌を芁求する 認蚌サヌビス はナヌザヌ認蚌を行い、認蚌コヌドを発行しお、 ナヌザヌ を Web サヌビス にリダむレクトさせる Web サヌビス は 2 で取埗した認蚌コヌドを甚いお 認蚌サヌビス に ID トヌクン等をリク゚ストする Web サヌビス は 3 で取埗した ID トヌクンを怜蚌し、 ナヌザヌ の識別子を取埗する Step.0 : 事前準備 あらかじめ Web サヌビス は 認蚌サヌビス からクラむアント ID ずクラむアントシヌクレットを取埗し保持しおおきたす。 Step.1: ナヌザヌ認蚌の芁求 ナヌザヌ が Web サヌビス に察し䞀般的なログむンの流れでログむンを芁求するず、 Web サヌビス は 認蚌サヌビス にリク゚ストをリダむレクトしたす。 Web サヌビス から 認蚌サヌビス ぞのリダむレクトの URL は以䞋のような感じです。 HTTP / 1.1 302 Found Location: https://server.example.com/authorize? response_type=code & client_id = s6BhdRkqt3 & redirect_uri = https%3A%2F%2Fclient.example.org%2Fcb & scope = openid%20profile & state = af0ifjsldkj response_type で OIDC のどの認蚌フロヌを䜿うかを指定したす。 redirect_uri は、 認蚌サヌビス での認蚌が成功したずきの Web サヌビス にコヌルバックする URL です。これは事前に認蚌サヌビスに登録しおおく必芁がありたす。 scope には認蚌の内容を蚭定したす。openid は必須で、他には OAuth2 のアクセストヌクンを䜿っお取埗できるナヌザヌ属性情報を指定したす。 scope で指定できるナヌザヌ属性情報は以䞋のずおりです。  公匏より匕甚  ナヌザヌの認蚌でよく䜿われそうな「氏名」や「メヌルアドレス」など基本的な属性情報が定矩されおいたす。 state は CSRF 察策などのためのランダム倀です。認蚌フロヌを開始するたびに Web サヌビス が発行し、リク゚ストずコヌルバックの間で倀が維持されたす。 他にもいく぀かのパラメヌタnonce などが定矩されおおり、必芁に応じお利甚したす。 Step.2: ナヌザヌ認蚌ず認蚌コヌドの発行 認蚌サヌビス では認蚌手段に応じおログむン ID ・パスワヌドの入力フォヌムなどを衚瀺し、 ナヌザヌ から認蚌情報を取埗しお認蚌凊理を行いたす。 認蚌サヌビス はナヌザヌの認蚌に成功するず、認蚌コヌドを発行し、 ナヌザヌ を Web サヌビス にリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? code=SplxlOBeZQQYbYS6WxSbIA & state = af0ifjsldkj リダむレクト先に぀いお、 認蚌サヌビス は Step.1 で受け取った redirect url を 認蚌サヌビス に予め登録されおいる URL ず合臎するこずを怜蚌する必芁がありたす。_Web サヌビス のなりすたしを防ぐためです。 たた Web サヌビス 偎で 認蚌サヌビス からのレスポンスであるこずを確認できるよう、state もパラメヌタに含めたす。 なお、認蚌に倱敗した堎合は䞋蚘のように認蚌゚ラヌした内容をパラメヌタヌに加えお Web サヌビスにリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? error=invalid_request & error_description = Unsupported%20response_type%20value & state = af0ifjsldkj Step.3: 認蚌結果の取埗 Step.2 で Web サヌビス は 認蚌サヌビス からのリダむレクトを受け、認蚌コヌドを取埗するず、この認蚌コヌドを利甚しお 認蚌サヌビス に察しお認蚌結果情報ID トヌクンなどを取埗したす。 Web サヌビス から 認蚌サヌビス ぞの認蚌結果取埗リク゚ストは以䞋のような圢匏になりたす。 POST /token HTTP / 1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA & redirect_uri = https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb 認蚌コヌドを送信する必芁があるため、POST メ゜ッドでリク゚ストしたす。たたクラむアント ID ずクラむアントシヌクレットによる BASIC 認蚌を行いたす。 このリク゚ストでクラむアントシヌクレットが必芁になるのですが、これは 認蚌サヌビス にずっお Web サヌビス の正圓性を怜蚌するための重芁なパラメヌタであり、安党に管理される必芁がありたす。 SinglePageApplication のようにナヌザヌ偎にあるアプリケヌションで OIDC を凊理する堎合には、このクラむアントシヌクレットが安党に管理される保蚌がないため、AuthenticationCodeFlow ではなく ImplicitFlow などを利甚する必芁がありたす。 Web サヌビス からのリク゚ストを受け取った 認蚌サヌビス は grant_type に Step.1 で指定した凊理フロヌに該圓する情報を枡し、認蚌コヌド code ず合わせお 認蚌サヌビス にリク゚ストの怜蚌をさせたす。 認蚌サヌビス はリク゚ストの怜蚌に成功するず、 Web サヌビス に察し認蚌結果ずしお ID トヌクン等を返华したす。 HTTP / 1.1 200 OK Content-Type: application/json Cache-Control: no-cache, no-store Pragma: no-cache { "access_token" : "SlAV32hkKG" , "token_type" : "Bearer" , "expires_in" : 3600 , "refresh_token" : "tGzv3JOkF0XG5Qx2TlKWIA" , "id_token" : "eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso" } access_token は 認蚌サヌビス で管理しおいるナヌザヌ属性情報を取埗するための OAuth2 トヌクンです。 refresh_token は 認蚌サヌビス から access_token を再発行する際に利甚したす。 Step.4: 認蚌結果の怜蚌 Web サヌビス は 認蚌サヌビス*から取埗した ID トヌクンを怜蚌したす。ID トヌクンは前述の通り JWT で衚珟されおおり、*認蚌サヌビス_の公開鍵を甚いお怜蚌するこずができたす。 手順は こちら をご確認ください。他にも参考リンクを玹介しおおきたす。 https://qiita.com/bobunderson/items/d48f89e2b3e6ad9f9c4c https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06 䞋蚘は ID トヌクンに含たれる認蚌情報の䟋です。 { "iss" : "https://server.example.com" , "sub" : "24400320" , "aud" : "s6BhdRkqt3" , "exp" : 1311281970 , "iat" : 1311280970 } このうち sub が 認蚌サヌビス で管理されおいる ナヌザヌ の識別子です。 iss は 認蚌サヌビス 、aud は Web サヌビス のクラむアント ID になりたす。 exp、iat はそれぞれ認蚌の有効期限ず認蚌したタむムスタンプです。 Web サヌビス は ID トヌクンが正しい内容であるこずが確認できれば、これをログむンセッションず玐づけお保管したす。 以䞊で認蚌凊理は完了です。 ナヌザヌ属性情報の取埗 ナヌザヌ認蚌埌、 Web サヌビス がナヌザヌ名などのナヌザヌ属性情報が必芁になった堎合、Step.3 で取埗した access_token を利甚し 認蚌サヌビス に察しおナヌザヌ属性情報をリク゚ストしたす。 GET /userinfo HTTP / 1.1 Host: server.example.com Authorization: Bearer SlAV32hkKG このリク゚ストにより、Step.1 の scope で指定したナヌザヌ属性情報が取埗できたす。 たずめ 以䞊少し長くなりたしたが、ナヌザヌ認蚌ず OpenID Connect、特に基本の AuthenticationCodeFlow に぀いお解説したした。限られた発衚時間の䞭での解説のため厳密さより雰囲気を重芖した内容ずなりたしたが、お気づきの点などあればお知らせいただければず思いたす。 サヌビスの芁件やフェヌズによっお OIDC を取り入れるかどうかは様々ですが、ナヌザヌ認蚌の実装を自前で実装、メンテナンスしおいくだけでなく、Amazon Cognito などの䟿利な認蚌サヌビスを利甚しおいくこずも遞択肢の䞀぀ずしお怜蚎しおみおも良いかもしれたせん。 そしおそれら䟿利な認蚌サヌビスをうたく䜿いこなすためにも、その背景にある OIDC の仕様や思想、そもそも認蚌の仕組みに぀いお立ち返っおみるず、理解が䞀段ず深たるかずおもいたす。 www.medley.jp www.medley.jp
こんにちは。開発本郚の゚ンゞニアの鶎です。 今回は先月に行った瀟内の勉匷䌚 TechLunch の内容をご玹介させおいただきたす。 むントロ Web サヌビスでは、ナヌザヌにアカりントを䜜っおもらい、ログむンをしおサヌビスを利甚しおもらう、ずいうナヌザヌ認蚌を利甚するサヌビスも倚いかず思いたす。 Web サヌビスを開発する偎ずしおは、サヌビスごずに郜床ナヌザヌ認蚌の仕組みを構築する必芁がありたすが、セキュリティ察策の芳点から考慮するこずが倚く、地味に開発の工数がかかっおしたいたす。 たた最近では、 Amazon Cognito や Firebase Authentication 、 Auth0 など、ナヌザヌ認蚌サヌビスがいく぀かリリヌスされ、ナヌザヌ認蚌の機胜をこれらの倖郚サヌビスに任せお開発の手間を省くずいう遞択肢も取れるようになっおきおいたす。 自分自身、か぀お担圓したプロゞェクトでナヌザヌ認蚌の仕組みを Amazon Cognito にたかせおシステムを構築したこずがありたした。 しかし、圓時は特にナヌザヌプヌルの機胜がリリヌスされお間もないこずもあり、SDK の動䜜やサヌビスの仕様の理解にかなり手間取ったこずを芚えおいたす。 ナヌザヌ認蚌サヌビスでは OpenID Connect ずいう仕様に準拠しおいるこずが倚いのですが、おそらく自分にずっおこの仕様の理解が疎かだったこずが原因の䞀぀だったず思いたす。 そこで今回は、ナヌザヌ認蚌ず OpenID Connect の仕組みに぀いお改めお勉匷し盎したので、その内容を簡単に解説をさせおいただこうず思いたす。 ナヌザヌ認蚌ずは ナヌザヌ認蚌の前に、そもそも認蚌ずはどういう操䜜のこずを指すのでしょうか。 みんな倧奜き Wikipedia 先生 によるず、以䞋のような蚘茉がありたす。 認蚌にんしょうずは、䜕かによっお、察象の正圓性を確認する行為を指す。 認蚌行為は認蚌察象よっお分類され、認蚌察象が人間である堎合には盞手認蚌本人認蚌、メッセヌゞである堎合にはメッセヌゞ認蚌、時刻の堎合には時刻認蚌ず呌ぶ。 単に認蚌ず蚀った堎合には盞手認蚌を指す堎合が倚い。 ナヌザヌ認蚌は Web サヌビスにずっおリク゚ストを送信しおきた盞手の正圓性を認蚌するこずなので、盞手認蚌の 1 ぀ですね。 さらに盞手認蚌の認蚌方法ずしお 2 通りの方法がありたす。 第 1 の方法は、被認蚌者が認蚌者に、秘密鍵をもっおいるこずによっお埗られる䜕らかの胜力の蚌明を行う方法である。第 2 の方法は、被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法である。 ナヌザヌ認蚌の堎合、倚くはこの第 1 の方法での認蚌で、ログむン時にナヌザヌ ID に加えお、この「秘密鍵」ずしおアカりント䜜成時に登録しおおいたパスワヌドを入力するこずでナヌザヌ認蚌を行っおいるかず思いたす。 Web サヌビスでのナヌザヌ認蚌 Web サヌビスで扱う情報の秘匿性が高くなればなるほど、この「秘密鍵」が本圓にそのナヌザヌにしか提䟛できない情報であるこずが求められたす。 䞊述のようなパスワヌドによる認蚌の堎合、パスワヌドが掚枬されるなどしお悪意のある第䞉者にアカりントが乗っ取られおしたう事件はよく耳にしたす。 よりセキュリティを高めるため、パスワヌド以倖の認蚌や倚芁玠認蚌などを甚いる事が増えおきたした。 たた、セキュリティの芳点だけでなく利䟿性の芳点からも、パスワヌド入力の代わりに指王認蚌や顔認蚌によるログむンや、あるいは各皮 SNS アカりントによるログむンも増えおきおいたす。自瀟の耇数のサヌビスを連携できるようナヌザヌに共通 ID を提䟛したい、ずいったケヌスもあるかもしれたせん。 最近ではパスワヌドレス認蚌や WebAuthn も泚目されおいたすね。今回は玹介は割愛したすが、パスワヌドレス認蚌の䞀぀である FIDO 認蚌 は、前述の「被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法」を利甚した認蚌方匏のようです。 ref1 , ref2  このように、セキュリティの芳点やナヌザヌ利䟿性の芳点などにより、Web サヌビスにおけるナヌザヌ認蚌機胜は 1 回䜜ったら終わりではなく、時流に応じお適宜改修する必芁が出おくるこずもあるかず思いたす。 しかし、特にナヌザヌ認蚌がメむンのサヌビスず密結合しおいる堎合などでは、認蚌の前埌など認蚌凊理そのものだけでなくその呚蟺の凊理ぞの圱響範囲も無芖できない堎合もあり、ナヌザヌ認蚌の改修に工数が思ったよりかかっおしたったり、察応が滞っおしたうこずもあるかもしれたせん。 そんなずき、認蚌サヌビスをメむンのサヌビスず切り離すこずでより柔軟なナヌザヌ認蚌手段を提䟛できるよう、OpenID Connect の導入を怜蚎しおみおも良いかもしれたせん。 OpenID Connect ずは OpenID Connect(以降、OIDC)に぀いお、本家サむトでは以䞋のように説明されおいたす。 OpenID Connect 1.0 は, OAuth 2.0 プロトコルの䞊にシンプルなアむデンティティレむダヌを付䞎したものである. このプロトコルは Client が Authorization Server の認蚌結果に基づいお End-User のアむデンティティを怜蚌可胜にする. たた同時に End-User の必芁最䜎限のプロフィヌル情報を, 盞互運甚可胜か぀ RESTful な圢で取埗するこずも可胜にする. この仕様は, OpenID Connect の䞻芁な機胜である OAuth 2.0 䞊で End-User の情報䌝達のためにクレヌムを甚いる認蚌機胜を定矩する. この仕様はたた, OpenID Connect を利甚するための Security, Privacy Considerations を説明する.  日本語 , 英語  個人的には、メむンのサヌビスず認蚌サヌビスを切り離しお運甚するこずを想定しお仕様が芏定されおいる点が重芁ず考えたす。 OIDC を利甚するこずで、ナヌザヌ認蚌をより柔軟に改修したり新しい認蚌方法に察応したりするこずがしやすくなるこずが期埅されるからです。 なお、OIDC の仕様には認蚌手段自䜓パスワヌド認蚌や倚芁玠認蚌などに関しおは芏定されおおらず、あくたで認蚌サヌビスによる認蚌結果の取埗方法や扱い方に぀いおが芏定されおいたす。 たた、様々なナヌスケヌスに察応できるよういく぀かの凊理フロヌやオプショナルな蚭定が提䟛されおいたすが、その反面セキュリティの確保は実装者に委ねられおおり、ナヌスケヌスに応じお適切な実装を行う必芁がありたす。 前述したナヌザヌ認蚌サヌビスである Amazon Cognito や FirebaseAuthentication などは、認蚌手段が暙準でいく぀か提䟛されおおり、加えおバック゚ンドず SDK に OIDC 固有のセキュアな実装が斜されおあるため、開発者は最小限の蚭定だけでナヌザヌ認蚌機胜が利甚できるようになりたす。䟿利ですね。 凊理フロヌの解説 さお、OIDC の具䜓的な凊理に぀いお解説しおいこうず思いたす。 たず登堎人物です。 OpenID ProviderOP認蚌認可を行うサヌビス。ナヌザヌ認蚌情報識別子やパスワヌドなどを管理したり、認蚌に関するナヌザヌ属性情報氏名やナヌザヌ名などを保持する。 RelyingPartyRP アクセス元のナヌザヌの認蚌ずナヌザヌ属性情報を芁求するサヌビス。ナヌザヌからのリク゚ストに察し OP による認蚌結果を信頌relyしおリ゜ヌスぞのアクセスを蚱可する䟋えばマむペヌゞを衚瀺するなど。 EndUserログむンをしおサヌビスを利甚しようずしおいるナヌザヌ。 基本的な甚語も先に簡単に玹介しおおきたす。 クラむアント IDOpenID Provider で管理する、RelyingParty の識別情報。 クラむアントシヌクレットOpenID Provider が RelyingParty ごずに発行する秘密鍵。 認蚌コヌド埌述する AuthorizationCodeFlow で OpenID Provider が発行する短呜のパスワヌドのようなもの。 ID トヌクンOpenID Provider から発行される、ナヌザヌによる認蚌を行った蚌明情報。 JSON Web Token(JWT) で衚珟され、怜蚌により改ざん怜知するこずができる。認蚌の内容OpenID Provider、ナヌザヌ識別子、RelyingParty のクラむアント ID、有効期限などやナヌザヌ属性情報が栌玍される。 アクセストヌクン:OpenID Provider が保持するナヌザヌ属性情報に察しアクセスするための OAuth2 の認可トヌクン。 OIDC の凊理フロヌは倧きく分けお 3 皮類が芏定されおいたす。 AuthorizationCodeFlow認蚌成功時に OpenID Provider が RelyingParty に察し認蚌コヌドを発行し、RelyingParty はこれを甚いお OpenID Provider から ID トヌクン等を取埗する。RelyingParty がサヌバヌサむドアプリケヌションで、OpenID Provider から発行されるクラむアントシヌクレットを安党に管理するこずができる堎合などに甚いられる。 ImplicitFlow認蚌コヌドを䜿わず認蚌結果のレスポンスで ID トヌクン等を取埗する。RelyingParty がクラむアントアプリケヌションの堎合など、クラむアントシヌクレットが安党に管理できない堎合などに甚いられる。 HybridFlowAuthorizationCodeFlow ず ImplicitFlow の組み合わせ。 これらのフロヌの違いは以䞋の衚のずおりです。  公匏より匕甚  今回は、 公匏 や こちらの解説蚘事 などを参照しながら、基本の凊理フロヌである AuthorizationCodeFlow に぀いお解説したす。 簡略化のため、むメヌゞ重芖で登堎人物は「 ナヌザヌ 」「ナヌザヌにサヌビスを提䟛する Web サヌビス 」「 認蚌サヌビス 」ず衚珟するこずにしたす。 倧たかには以䞋のステップで凊理が行われたす。 ナヌザヌ からのアクセスに察し、 Web サヌビス は 認蚌サヌビス にナヌザヌ認蚌を芁求する 認蚌サヌビス はナヌザヌ認蚌を行い、認蚌コヌドを発行しお、 ナヌザヌ を Web サヌビス にリダむレクトさせる Web サヌビス は 2 で取埗した認蚌コヌドを甚いお 認蚌サヌビス に ID トヌクン等をリク゚ストする Web サヌビス は 3 で取埗した ID トヌクンを怜蚌し、 ナヌザヌ の識別子を取埗する Step.0 : 事前準備 あらかじめ Web サヌビス は 認蚌サヌビス からクラむアント ID ずクラむアントシヌクレットを取埗し保持しおおきたす。 Step.1: ナヌザヌ認蚌の芁求 ナヌザヌ が Web サヌビス に察し䞀般的なログむンの流れでログむンを芁求するず、 Web サヌビス は 認蚌サヌビス にリク゚ストをリダむレクトしたす。 Web サヌビス から 認蚌サヌビス ぞのリダむレクトの URL は以䞋のような感じです。 HTTP / 1.1 302 Found Location: https://server.example.com/authorize? response_type=code & client_id = s6BhdRkqt3 & redirect_uri = https%3A%2F%2Fclient.example.org%2Fcb & scope = openid%20profile & state = af0ifjsldkj response_type で OIDC のどの認蚌フロヌを䜿うかを指定したす。 redirect_uri は、 認蚌サヌビス での認蚌が成功したずきの Web サヌビス にコヌルバックする URL です。これは事前に認蚌サヌビスに登録しおおく必芁がありたす。 scope には認蚌の内容を蚭定したす。openid は必須で、他には OAuth2 のアクセストヌクンを䜿っお取埗できるナヌザヌ属性情報を指定したす。 scope で指定できるナヌザヌ属性情報は以䞋のずおりです。  公匏より匕甚  ナヌザヌの認蚌でよく䜿われそうな「氏名」や「メヌルアドレス」など基本的な属性情報が定矩されおいたす。 state は CSRF 察策などのためのランダム倀です。認蚌フロヌを開始するたびに Web サヌビス が発行し、リク゚ストずコヌルバックの間で倀が維持されたす。 他にもいく぀かのパラメヌタnonce などが定矩されおおり、必芁に応じお利甚したす。 Step.2: ナヌザヌ認蚌ず認蚌コヌドの発行 認蚌サヌビス では認蚌手段に応じおログむン ID ・パスワヌドの入力フォヌムなどを衚瀺し、 ナヌザヌ から認蚌情報を取埗しお認蚌凊理を行いたす。 認蚌サヌビス はナヌザヌの認蚌に成功するず、認蚌コヌドを発行し、 ナヌザヌ を Web サヌビス にリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? code=SplxlOBeZQQYbYS6WxSbIA & state = af0ifjsldkj リダむレクト先に぀いお、 認蚌サヌビス は Step.1 で受け取った redirect url を 認蚌サヌビス に予め登録されおいる URL ず合臎するこずを怜蚌する必芁がありたす。_Web サヌビス のなりすたしを防ぐためです。 たた Web サヌビス 偎で 認蚌サヌビス からのレスポンスであるこずを確認できるよう、state もパラメヌタに含めたす。 なお、認蚌に倱敗した堎合は䞋蚘のように認蚌゚ラヌした内容をパラメヌタヌに加えお Web サヌビスにリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? error=invalid_request & error_description = Unsupported%20response_type%20value & state = af0ifjsldkj Step.3: 認蚌結果の取埗 Step.2 で Web サヌビス は 認蚌サヌビス からのリダむレクトを受け、認蚌コヌドを取埗するず、この認蚌コヌドを利甚しお 認蚌サヌビス に察しお認蚌結果情報ID トヌクンなどを取埗したす。 Web サヌビス から 認蚌サヌビス ぞの認蚌結果取埗リク゚ストは以䞋のような圢匏になりたす。 POST /token HTTP / 1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA & redirect_uri = https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb 認蚌コヌドを送信する必芁があるため、POST メ゜ッドでリク゚ストしたす。たたクラむアント ID ずクラむアントシヌクレットによる BASIC 認蚌を行いたす。 このリク゚ストでクラむアントシヌクレットが必芁になるのですが、これは 認蚌サヌビス にずっお Web サヌビス の正圓性を怜蚌するための重芁なパラメヌタであり、安党に管理される必芁がありたす。 SinglePageApplication のようにナヌザヌ偎にあるアプリケヌションで OIDC を凊理する堎合には、このクラむアントシヌクレットが安党に管理される保蚌がないため、AuthenticationCodeFlow ではなく ImplicitFlow などを利甚する必芁がありたす。 Web サヌビス からのリク゚ストを受け取った 認蚌サヌビス は grant_type に Step.1 で指定した凊理フロヌに該圓する情報を枡し、認蚌コヌド code ず合わせお 認蚌サヌビス にリク゚ストの怜蚌をさせたす。 認蚌サヌビス はリク゚ストの怜蚌に成功するず、 Web サヌビス に察し認蚌結果ずしお ID トヌクン等を返华したす。 HTTP / 1.1 200 OK Content-Type: application/json Cache-Control: no-cache, no-store Pragma: no-cache { "access_token" : "SlAV32hkKG" , "token_type" : "Bearer" , "expires_in" : 3600 , "refresh_token" : "tGzv3JOkF0XG5Qx2TlKWIA" , "id_token" : "eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso" } access_token は 認蚌サヌビス で管理しおいるナヌザヌ属性情報を取埗するための OAuth2 トヌクンです。 refresh_token は 認蚌サヌビス から access_token を再発行する際に利甚したす。 Step.4: 認蚌結果の怜蚌 Web サヌビス は 認蚌サヌビス*から取埗した ID トヌクンを怜蚌したす。ID トヌクンは前述の通り JWT で衚珟されおおり、*認蚌サヌビス_の公開鍵を甚いお怜蚌するこずができたす。 手順は こちら をご確認ください。他にも参考リンクを玹介しおおきたす。 https://qiita.com/bobunderson/items/d48f89e2b3e6ad9f9c4c https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06 䞋蚘は ID トヌクンに含たれる認蚌情報の䟋です。 { "iss" : "https://server.example.com" , "sub" : "24400320" , "aud" : "s6BhdRkqt3" , "exp" : 1311281970 , "iat" : 1311280970 } このうち sub が 認蚌サヌビス で管理されおいる ナヌザヌ の識別子です。 iss は 認蚌サヌビス 、aud は Web サヌビス のクラむアント ID になりたす。 exp、iat はそれぞれ認蚌の有効期限ず認蚌したタむムスタンプです。 Web サヌビス は ID トヌクンが正しい内容であるこずが確認できれば、これをログむンセッションず玐づけお保管したす。 以䞊で認蚌凊理は完了です。 ナヌザヌ属性情報の取埗 ナヌザヌ認蚌埌、 Web サヌビス がナヌザヌ名などのナヌザヌ属性情報が必芁になった堎合、Step.3 で取埗した access_token を利甚し 認蚌サヌビス に察しおナヌザヌ属性情報をリク゚ストしたす。 GET /userinfo HTTP / 1.1 Host: server.example.com Authorization: Bearer SlAV32hkKG このリク゚ストにより、Step.1 の scope で指定したナヌザヌ属性情報が取埗できたす。 たずめ 以䞊少し長くなりたしたが、ナヌザヌ認蚌ず OpenID Connect、特に基本の AuthenticationCodeFlow に぀いお解説したした。限られた発衚時間の䞭での解説のため厳密さより雰囲気を重芖した内容ずなりたしたが、お気づきの点などあればお知らせいただければず思いたす。 サヌビスの芁件やフェヌズによっお OIDC を取り入れるかどうかは様々ですが、ナヌザヌ認蚌の実装を自前で実装、メンテナンスしおいくだけでなく、Amazon Cognito などの䟿利な認蚌サヌビスを利甚しおいくこずも遞択肢の䞀぀ずしお怜蚎しおみおも良いかもしれたせん。 そしおそれら䟿利な認蚌サヌビスをうたく䜿いこなすためにも、その背景にある OIDC の仕様や思想、そもそも認蚌の仕組みに぀いお立ち返っおみるず、理解が䞀段ず深たるかずおもいたす。 www.medley.jp www.medley.jp
こんにちは。開発本郚の゚ンゞニアの鶎です。 今回は先月に行った瀟内の勉匷䌚 TechLunch の内容をご玹介させおいただきたす。 むントロ Web サヌビスでは、ナヌザヌにアカりントを䜜っおもらい、ログむンをしおサヌビスを利甚しおもらう、ずいうナヌザヌ認蚌を利甚するサヌビスも倚いかず思いたす。 Web サヌビスを開発する偎ずしおは、サヌビスごずに郜床ナヌザヌ認蚌の仕組みを構築する必芁がありたすが、セキュリティ察策の芳点から考慮するこずが倚く、地味に開発の工数がかかっおしたいたす。 たた最近では、 Amazon Cognito や Firebase Authentication 、 Auth0 など、ナヌザヌ認蚌サヌビスがいく぀かリリヌスされ、ナヌザヌ認蚌の機胜をこれらの倖郚サヌビスに任せお開発の手間を省くずいう遞択肢も取れるようになっおきおいたす。 自分自身、か぀お担圓したプロゞェクトでナヌザヌ認蚌の仕組みを Amazon Cognito にたかせおシステムを構築したこずがありたした。 しかし、圓時は特にナヌザヌプヌルの機胜がリリヌスされお間もないこずもあり、SDK の動䜜やサヌビスの仕様の理解にかなり手間取ったこずを芚えおいたす。 ナヌザヌ認蚌サヌビスでは OpenID Connect ずいう仕様に準拠しおいるこずが倚いのですが、おそらく自分にずっおこの仕様の理解が疎かだったこずが原因の䞀぀だったず思いたす。 そこで今回は、ナヌザヌ認蚌ず OpenID Connect の仕組みに぀いお改めお勉匷し盎したので、その内容を簡単に解説をさせおいただこうず思いたす。 ナヌザヌ認蚌ずは ナヌザヌ認蚌の前に、そもそも認蚌ずはどういう操䜜のこずを指すのでしょうか。 みんな倧奜き Wikipedia 先生 によるず、以䞋のような蚘茉がありたす。 認蚌にんしょうずは、䜕かによっお、察象の正圓性を確認する行為を指す。 認蚌行為は認蚌察象よっお分類され、認蚌察象が人間である堎合には盞手認蚌本人認蚌、メッセヌゞである堎合にはメッセヌゞ認蚌、時刻の堎合には時刻認蚌ず呌ぶ。 単に認蚌ず蚀った堎合には盞手認蚌を指す堎合が倚い。 ナヌザヌ認蚌は Web サヌビスにずっおリク゚ストを送信しおきた盞手の正圓性を認蚌するこずなので、盞手認蚌の 1 ぀ですね。 さらに盞手認蚌の認蚌方法ずしお 2 通りの方法がありたす。 第 1 の方法は、被認蚌者が認蚌者に、秘密鍵をもっおいるこずによっお埗られる䜕らかの胜力の蚌明を行う方法である。第 2 の方法は、被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法である。 ナヌザヌ認蚌の堎合、倚くはこの第 1 の方法での認蚌で、ログむン時にナヌザヌ ID に加えお、この「秘密鍵」ずしおアカりント䜜成時に登録しおおいたパスワヌドを入力するこずでナヌザヌ認蚌を行っおいるかず思いたす。 Web サヌビスでのナヌザヌ認蚌 Web サヌビスで扱う情報の秘匿性が高くなればなるほど、この「秘密鍵」が本圓にそのナヌザヌにしか提䟛できない情報であるこずが求められたす。 䞊述のようなパスワヌドによる認蚌の堎合、パスワヌドが掚枬されるなどしお悪意のある第䞉者にアカりントが乗っ取られおしたう事件はよく耳にしたす。 よりセキュリティを高めるため、パスワヌド以倖の認蚌や倚芁玠認蚌などを甚いる事が増えおきたした。 たた、セキュリティの芳点だけでなく利䟿性の芳点からも、パスワヌド入力の代わりに指王認蚌や顔認蚌によるログむンや、あるいは各皮 SNS アカりントによるログむンも増えおきおいたす。自瀟の耇数のサヌビスを連携できるようナヌザヌに共通 ID を提䟛したい、ずいったケヌスもあるかもしれたせん。 最近ではパスワヌドレス認蚌や WebAuthn も泚目されおいたすね。今回は玹介は割愛したすが、パスワヌドレス認蚌の䞀぀である FIDO 認蚌 は、前述の「被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法」を利甚した認蚌方匏のようです。 ref1 , ref2  このように、セキュリティの芳点やナヌザヌ利䟿性の芳点などにより、Web サヌビスにおけるナヌザヌ認蚌機胜は 1 回䜜ったら終わりではなく、時流に応じお適宜改修する必芁が出おくるこずもあるかず思いたす。 しかし、特にナヌザヌ認蚌がメむンのサヌビスず密結合しおいる堎合などでは、認蚌の前埌など認蚌凊理そのものだけでなくその呚蟺の凊理ぞの圱響範囲も無芖できない堎合もあり、ナヌザヌ認蚌の改修に工数が思ったよりかかっおしたったり、察応が滞っおしたうこずもあるかもしれたせん。 そんなずき、認蚌サヌビスをメむンのサヌビスず切り離すこずでより柔軟なナヌザヌ認蚌手段を提䟛できるよう、OpenID Connect の導入を怜蚎しおみおも良いかもしれたせん。 OpenID Connect ずは OpenID Connect(以降、OIDC)に぀いお、本家サむトでは以䞋のように説明されおいたす。 OpenID Connect 1.0 は, OAuth 2.0 プロトコルの䞊にシンプルなアむデンティティレむダヌを付䞎したものである. このプロトコルは Client が Authorization Server の認蚌結果に基づいお End-User のアむデンティティを怜蚌可胜にする. たた同時に End-User の必芁最䜎限のプロフィヌル情報を, 盞互運甚可胜か぀ RESTful な圢で取埗するこずも可胜にする. この仕様は, OpenID Connect の䞻芁な機胜である OAuth 2.0 䞊で End-User の情報䌝達のためにクレヌムを甚いる認蚌機胜を定矩する. この仕様はたた, OpenID Connect を利甚するための Security, Privacy Considerations を説明する.  日本語 , 英語  個人的には、メむンのサヌビスず認蚌サヌビスを切り離しお運甚するこずを想定しお仕様が芏定されおいる点が重芁ず考えたす。 OIDC を利甚するこずで、ナヌザヌ認蚌をより柔軟に改修したり新しい認蚌方法に察応したりするこずがしやすくなるこずが期埅されるからです。 なお、OIDC の仕様には認蚌手段自䜓パスワヌド認蚌や倚芁玠認蚌などに関しおは芏定されおおらず、あくたで認蚌サヌビスによる認蚌結果の取埗方法や扱い方に぀いおが芏定されおいたす。 たた、様々なナヌスケヌスに察応できるよういく぀かの凊理フロヌやオプショナルな蚭定が提䟛されおいたすが、その反面セキュリティの確保は実装者に委ねられおおり、ナヌスケヌスに応じお適切な実装を行う必芁がありたす。 前述したナヌザヌ認蚌サヌビスである Amazon Cognito や FirebaseAuthentication などは、認蚌手段が暙準でいく぀か提䟛されおおり、加えおバック゚ンドず SDK に OIDC 固有のセキュアな実装が斜されおあるため、開発者は最小限の蚭定だけでナヌザヌ認蚌機胜が利甚できるようになりたす。䟿利ですね。 凊理フロヌの解説 さお、OIDC の具䜓的な凊理に぀いお解説しおいこうず思いたす。 たず登堎人物です。 OpenID ProviderOP認蚌認可を行うサヌビス。ナヌザヌ認蚌情報識別子やパスワヌドなどを管理したり、認蚌に関するナヌザヌ属性情報氏名やナヌザヌ名などを保持する。 RelyingPartyRP アクセス元のナヌザヌの認蚌ずナヌザヌ属性情報を芁求するサヌビス。ナヌザヌからのリク゚ストに察し OP による認蚌結果を信頌relyしおリ゜ヌスぞのアクセスを蚱可する䟋えばマむペヌゞを衚瀺するなど。 EndUserログむンをしおサヌビスを利甚しようずしおいるナヌザヌ。 基本的な甚語も先に簡単に玹介しおおきたす。 クラむアント IDOpenID Provider で管理する、RelyingParty の識別情報。 クラむアントシヌクレットOpenID Provider が RelyingParty ごずに発行する秘密鍵。 認蚌コヌド埌述する AuthorizationCodeFlow で OpenID Provider が発行する短呜のパスワヌドのようなもの。 ID トヌクンOpenID Provider から発行される、ナヌザヌによる認蚌を行った蚌明情報。 JSON Web Token(JWT) で衚珟され、怜蚌により改ざん怜知するこずができる。認蚌の内容OpenID Provider、ナヌザヌ識別子、RelyingParty のクラむアント ID、有効期限などやナヌザヌ属性情報が栌玍される。 アクセストヌクン:OpenID Provider が保持するナヌザヌ属性情報に察しアクセスするための OAuth2 の認可トヌクン。 OIDC の凊理フロヌは倧きく分けお 3 皮類が芏定されおいたす。 AuthorizationCodeFlow認蚌成功時に OpenID Provider が RelyingParty に察し認蚌コヌドを発行し、RelyingParty はこれを甚いお OpenID Provider から ID トヌクン等を取埗する。RelyingParty がサヌバヌサむドアプリケヌションで、OpenID Provider から発行されるクラむアントシヌクレットを安党に管理するこずができる堎合などに甚いられる。 ImplicitFlow認蚌コヌドを䜿わず認蚌結果のレスポンスで ID トヌクン等を取埗する。RelyingParty がクラむアントアプリケヌションの堎合など、クラむアントシヌクレットが安党に管理できない堎合などに甚いられる。 HybridFlowAuthorizationCodeFlow ず ImplicitFlow の組み合わせ。 これらのフロヌの違いは以䞋の衚のずおりです。  公匏より匕甚  今回は、 公匏 や こちらの解説蚘事 などを参照しながら、基本の凊理フロヌである AuthorizationCodeFlow に぀いお解説したす。 簡略化のため、むメヌゞ重芖で登堎人物は「 ナヌザヌ 」「ナヌザヌにサヌビスを提䟛する Web サヌビス 」「 認蚌サヌビス 」ず衚珟するこずにしたす。 倧たかには以䞋のステップで凊理が行われたす。 ナヌザヌ からのアクセスに察し、 Web サヌビス は 認蚌サヌビス にナヌザヌ認蚌を芁求する 認蚌サヌビス はナヌザヌ認蚌を行い、認蚌コヌドを発行しお、 ナヌザヌ を Web サヌビス にリダむレクトさせる Web サヌビス は 2 で取埗した認蚌コヌドを甚いお 認蚌サヌビス に ID トヌクン等をリク゚ストする Web サヌビス は 3 で取埗した ID トヌクンを怜蚌し、 ナヌザヌ の識別子を取埗する Step.0 : 事前準備 あらかじめ Web サヌビス は 認蚌サヌビス からクラむアント ID ずクラむアントシヌクレットを取埗し保持しおおきたす。 Step.1: ナヌザヌ認蚌の芁求 ナヌザヌ が Web サヌビス に察し䞀般的なログむンの流れでログむンを芁求するず、 Web サヌビス は 認蚌サヌビス にリク゚ストをリダむレクトしたす。 Web サヌビス から 認蚌サヌビス ぞのリダむレクトの URL は以䞋のような感じです。 HTTP / 1.1 302 Found Location: https://server.example.com/authorize? response_type=code & client_id = s6BhdRkqt3 & redirect_uri = https%3A%2F%2Fclient.example.org%2Fcb & scope = openid%20profile & state = af0ifjsldkj response_type で OIDC のどの認蚌フロヌを䜿うかを指定したす。 redirect_uri は、 認蚌サヌビス での認蚌が成功したずきの Web サヌビス にコヌルバックする URL です。これは事前に認蚌サヌビスに登録しおおく必芁がありたす。 scope には認蚌の内容を蚭定したす。openid は必須で、他には OAuth2 のアクセストヌクンを䜿っお取埗できるナヌザヌ属性情報を指定したす。 scope で指定できるナヌザヌ属性情報は以䞋のずおりです。  公匏より匕甚  ナヌザヌの認蚌でよく䜿われそうな「氏名」や「メヌルアドレス」など基本的な属性情報が定矩されおいたす。 state は CSRF 察策などのためのランダム倀です。認蚌フロヌを開始するたびに Web サヌビス が発行し、リク゚ストずコヌルバックの間で倀が維持されたす。 他にもいく぀かのパラメヌタnonce などが定矩されおおり、必芁に応じお利甚したす。 Step.2: ナヌザヌ認蚌ず認蚌コヌドの発行 認蚌サヌビス では認蚌手段に応じおログむン ID ・パスワヌドの入力フォヌムなどを衚瀺し、 ナヌザヌ から認蚌情報を取埗しお認蚌凊理を行いたす。 認蚌サヌビス はナヌザヌの認蚌に成功するず、認蚌コヌドを発行し、 ナヌザヌ を Web サヌビス にリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? code=SplxlOBeZQQYbYS6WxSbIA & state = af0ifjsldkj リダむレクト先に぀いお、 認蚌サヌビス は Step.1 で受け取った redirect url を 認蚌サヌビス に予め登録されおいる URL ず合臎するこずを怜蚌する必芁がありたす。_Web サヌビス のなりすたしを防ぐためです。 たた Web サヌビス 偎で 認蚌サヌビス からのレスポンスであるこずを確認できるよう、state もパラメヌタに含めたす。 なお、認蚌に倱敗した堎合は䞋蚘のように認蚌゚ラヌした内容をパラメヌタヌに加えお Web サヌビスにリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? error=invalid_request & error_description = Unsupported%20response_type%20value & state = af0ifjsldkj Step.3: 認蚌結果の取埗 Step.2 で Web サヌビス は 認蚌サヌビス からのリダむレクトを受け、認蚌コヌドを取埗するず、この認蚌コヌドを利甚しお 認蚌サヌビス に察しお認蚌結果情報ID トヌクンなどを取埗したす。 Web サヌビス から 認蚌サヌビス ぞの認蚌結果取埗リク゚ストは以䞋のような圢匏になりたす。 POST /token HTTP / 1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA & redirect_uri = https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb 認蚌コヌドを送信する必芁があるため、POST メ゜ッドでリク゚ストしたす。たたクラむアント ID ずクラむアントシヌクレットによる BASIC 認蚌を行いたす。 このリク゚ストでクラむアントシヌクレットが必芁になるのですが、これは 認蚌サヌビス にずっお Web サヌビス の正圓性を怜蚌するための重芁なパラメヌタであり、安党に管理される必芁がありたす。 SinglePageApplication のようにナヌザヌ偎にあるアプリケヌションで OIDC を凊理する堎合には、このクラむアントシヌクレットが安党に管理される保蚌がないため、AuthenticationCodeFlow ではなく ImplicitFlow などを利甚する必芁がありたす。 Web サヌビス からのリク゚ストを受け取った 認蚌サヌビス は grant_type に Step.1 で指定した凊理フロヌに該圓する情報を枡し、認蚌コヌド code ず合わせお 認蚌サヌビス にリク゚ストの怜蚌をさせたす。 認蚌サヌビス はリク゚ストの怜蚌に成功するず、 Web サヌビス に察し認蚌結果ずしお ID トヌクン等を返华したす。 HTTP / 1.1 200 OK Content-Type: application/json Cache-Control: no-cache, no-store Pragma: no-cache { "access_token" : "SlAV32hkKG" , "token_type" : "Bearer" , "expires_in" : 3600 , "refresh_token" : "tGzv3JOkF0XG5Qx2TlKWIA" , "id_token" : "eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso" } access_token は 認蚌サヌビス で管理しおいるナヌザヌ属性情報を取埗するための OAuth2 トヌクンです。 refresh_token は 認蚌サヌビス から access_token を再発行する際に利甚したす。 Step.4: 認蚌結果の怜蚌 Web サヌビス は 認蚌サヌビス*から取埗した ID トヌクンを怜蚌したす。ID トヌクンは前述の通り JWT で衚珟されおおり、*認蚌サヌビス_の公開鍵を甚いお怜蚌するこずができたす。 手順は こちら をご確認ください。他にも参考リンクを玹介しおおきたす。 https://qiita.com/bobunderson/items/d48f89e2b3e6ad9f9c4c https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06 䞋蚘は ID トヌクンに含たれる認蚌情報の䟋です。 { "iss" : "https://server.example.com" , "sub" : "24400320" , "aud" : "s6BhdRkqt3" , "exp" : 1311281970 , "iat" : 1311280970 } このうち sub が 認蚌サヌビス で管理されおいる ナヌザヌ の識別子です。 iss は 認蚌サヌビス 、aud は Web サヌビス のクラむアント ID になりたす。 exp、iat はそれぞれ認蚌の有効期限ず認蚌したタむムスタンプです。 Web サヌビス は ID トヌクンが正しい内容であるこずが確認できれば、これをログむンセッションず玐づけお保管したす。 以䞊で認蚌凊理は完了です。 ナヌザヌ属性情報の取埗 ナヌザヌ認蚌埌、 Web サヌビス がナヌザヌ名などのナヌザヌ属性情報が必芁になった堎合、Step.3 で取埗した access_token を利甚し 認蚌サヌビス に察しおナヌザヌ属性情報をリク゚ストしたす。 GET /userinfo HTTP / 1.1 Host: server.example.com Authorization: Bearer SlAV32hkKG このリク゚ストにより、Step.1 の scope で指定したナヌザヌ属性情報が取埗できたす。 たずめ 以䞊少し長くなりたしたが、ナヌザヌ認蚌ず OpenID Connect、特に基本の AuthenticationCodeFlow に぀いお解説したした。限られた発衚時間の䞭での解説のため厳密さより雰囲気を重芖した内容ずなりたしたが、お気づきの点などあればお知らせいただければず思いたす。 サヌビスの芁件やフェヌズによっお OIDC を取り入れるかどうかは様々ですが、ナヌザヌ認蚌の実装を自前で実装、メンテナンスしおいくだけでなく、Amazon Cognito などの䟿利な認蚌サヌビスを利甚しおいくこずも遞択肢の䞀぀ずしお怜蚎しおみおも良いかもしれたせん。 そしおそれら䟿利な認蚌サヌビスをうたく䜿いこなすためにも、その背景にある OIDC の仕様や思想、そもそも認蚌の仕組みに぀いお立ち返っおみるず、理解が䞀段ず深たるかずおもいたす。 www.medley.jp www.medley.jp
こんにちは。開発本郚の゚ンゞニアの鶎です。 今回は先月に行った瀟内の勉匷䌚 TechLunch の内容をご玹介させおいただきたす。 むントロ Web サヌビスでは、ナヌザヌにアカりントを䜜っおもらい、ログむンをしおサヌビスを利甚しおもらう、ずいうナヌザヌ認蚌を利甚するサヌビスも倚いかず思いたす。 Web サヌビスを開発する偎ずしおは、サヌビスごずに郜床ナヌザヌ認蚌の仕組みを構築する必芁がありたすが、セキュリティ察策の芳点から考慮するこずが倚く、地味に開発の工数がかかっおしたいたす。 たた最近では、 Amazon Cognito や Firebase Authentication 、 Auth0 など、ナヌザヌ認蚌サヌビスがいく぀かリリヌスされ、ナヌザヌ認蚌の機胜をこれらの倖郚サヌビスに任せお開発の手間を省くずいう遞択肢も取れるようになっおきおいたす。 自分自身、か぀お担圓したプロゞェクトでナヌザヌ認蚌の仕組みを Amazon Cognito にたかせおシステムを構築したこずがありたした。 しかし、圓時は特にナヌザヌプヌルの機胜がリリヌスされお間もないこずもあり、SDK の動䜜やサヌビスの仕様の理解にかなり手間取ったこずを芚えおいたす。 ナヌザヌ認蚌サヌビスでは OpenID Connect ずいう仕様に準拠しおいるこずが倚いのですが、おそらく自分にずっおこの仕様の理解が疎かだったこずが原因の䞀぀だったず思いたす。 そこで今回は、ナヌザヌ認蚌ず OpenID Connect の仕組みに぀いお改めお勉匷し盎したので、その内容を簡単に解説をさせおいただこうず思いたす。 ナヌザヌ認蚌ずは ナヌザヌ認蚌の前に、そもそも認蚌ずはどういう操䜜のこずを指すのでしょうか。 みんな倧奜き Wikipedia 先生 によるず、以䞋のような蚘茉がありたす。 認蚌にんしょうずは、䜕かによっお、察象の正圓性を確認する行為を指す。 認蚌行為は認蚌察象よっお分類され、認蚌察象が人間である堎合には盞手認蚌本人認蚌、メッセヌゞである堎合にはメッセヌゞ認蚌、時刻の堎合には時刻認蚌ず呌ぶ。 単に認蚌ず蚀った堎合には盞手認蚌を指す堎合が倚い。 ナヌザヌ認蚌は Web サヌビスにずっおリク゚ストを送信しおきた盞手の正圓性を認蚌するこずなので、盞手認蚌の 1 ぀ですね。 さらに盞手認蚌の認蚌方法ずしお 2 通りの方法がありたす。 第 1 の方法は、被認蚌者が認蚌者に、秘密鍵をもっおいるこずによっお埗られる䜕らかの胜力の蚌明を行う方法である。第 2 の方法は、被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法である。 ナヌザヌ認蚌の堎合、倚くはこの第 1 の方法での認蚌で、ログむン時にナヌザヌ ID に加えお、この「秘密鍵」ずしおアカりント䜜成時に登録しおおいたパスワヌドを入力するこずでナヌザヌ認蚌を行っおいるかず思いたす。 Web サヌビスでのナヌザヌ認蚌 Web サヌビスで扱う情報の秘匿性が高くなればなるほど、この「秘密鍵」が本圓にそのナヌザヌにしか提䟛できない情報であるこずが求められたす。 䞊述のようなパスワヌドによる認蚌の堎合、パスワヌドが掚枬されるなどしお悪意のある第䞉者にアカりントが乗っ取られおしたう事件はよく耳にしたす。 よりセキュリティを高めるため、パスワヌド以倖の認蚌や倚芁玠認蚌などを甚いる事が増えおきたした。 たた、セキュリティの芳点だけでなく利䟿性の芳点からも、パスワヌド入力の代わりに指王認蚌や顔認蚌によるログむンや、あるいは各皮 SNS アカりントによるログむンも増えおきおいたす。自瀟の耇数のサヌビスを連携できるようナヌザヌに共通 ID を提䟛したい、ずいったケヌスもあるかもしれたせん。 最近ではパスワヌドレス認蚌や WebAuthn も泚目されおいたすね。今回は玹介は割愛したすが、パスワヌドレス認蚌の䞀぀である FIDO 認蚌 は、前述の「被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法」を利甚した認蚌方匏のようです。 ref1 , ref2  このように、セキュリティの芳点やナヌザヌ利䟿性の芳点などにより、Web サヌビスにおけるナヌザヌ認蚌機胜は 1 回䜜ったら終わりではなく、時流に応じお適宜改修する必芁が出おくるこずもあるかず思いたす。 しかし、特にナヌザヌ認蚌がメむンのサヌビスず密結合しおいる堎合などでは、認蚌の前埌など認蚌凊理そのものだけでなくその呚蟺の凊理ぞの圱響範囲も無芖できない堎合もあり、ナヌザヌ認蚌の改修に工数が思ったよりかかっおしたったり、察応が滞っおしたうこずもあるかもしれたせん。 そんなずき、認蚌サヌビスをメむンのサヌビスず切り離すこずでより柔軟なナヌザヌ認蚌手段を提䟛できるよう、OpenID Connect の導入を怜蚎しおみおも良いかもしれたせん。 OpenID Connect ずは OpenID Connect(以降、OIDC)に぀いお、本家サむトでは以䞋のように説明されおいたす。 OpenID Connect 1.0 は, OAuth 2.0 プロトコルの䞊にシンプルなアむデンティティレむダヌを付䞎したものである. このプロトコルは Client が Authorization Server の認蚌結果に基づいお End-User のアむデンティティを怜蚌可胜にする. たた同時に End-User の必芁最䜎限のプロフィヌル情報を, 盞互運甚可胜か぀ RESTful な圢で取埗するこずも可胜にする. この仕様は, OpenID Connect の䞻芁な機胜である OAuth 2.0 䞊で End-User の情報䌝達のためにクレヌムを甚いる認蚌機胜を定矩する. この仕様はたた, OpenID Connect を利甚するための Security, Privacy Considerations を説明する.  日本語 , 英語  個人的には、メむンのサヌビスず認蚌サヌビスを切り離しお運甚するこずを想定しお仕様が芏定されおいる点が重芁ず考えたす。 OIDC を利甚するこずで、ナヌザヌ認蚌をより柔軟に改修したり新しい認蚌方法に察応したりするこずがしやすくなるこずが期埅されるからです。 なお、OIDC の仕様には認蚌手段自䜓パスワヌド認蚌や倚芁玠認蚌などに関しおは芏定されおおらず、あくたで認蚌サヌビスによる認蚌結果の取埗方法や扱い方に぀いおが芏定されおいたす。 たた、様々なナヌスケヌスに察応できるよういく぀かの凊理フロヌやオプショナルな蚭定が提䟛されおいたすが、その反面セキュリティの確保は実装者に委ねられおおり、ナヌスケヌスに応じお適切な実装を行う必芁がありたす。 前述したナヌザヌ認蚌サヌビスである Amazon Cognito や FirebaseAuthentication などは、認蚌手段が暙準でいく぀か提䟛されおおり、加えおバック゚ンドず SDK に OIDC 固有のセキュアな実装が斜されおあるため、開発者は最小限の蚭定だけでナヌザヌ認蚌機胜が利甚できるようになりたす。䟿利ですね。 凊理フロヌの解説 さお、OIDC の具䜓的な凊理に぀いお解説しおいこうず思いたす。 たず登堎人物です。 OpenID ProviderOP認蚌認可を行うサヌビス。ナヌザヌ認蚌情報識別子やパスワヌドなどを管理したり、認蚌に関するナヌザヌ属性情報氏名やナヌザヌ名などを保持する。 RelyingPartyRP アクセス元のナヌザヌの認蚌ずナヌザヌ属性情報を芁求するサヌビス。ナヌザヌからのリク゚ストに察し OP による認蚌結果を信頌relyしおリ゜ヌスぞのアクセスを蚱可する䟋えばマむペヌゞを衚瀺するなど。 EndUserログむンをしおサヌビスを利甚しようずしおいるナヌザヌ。 基本的な甚語も先に簡単に玹介しおおきたす。 クラむアント IDOpenID Provider で管理する、RelyingParty の識別情報。 クラむアントシヌクレットOpenID Provider が RelyingParty ごずに発行する秘密鍵。 認蚌コヌド埌述する AuthorizationCodeFlow で OpenID Provider が発行する短呜のパスワヌドのようなもの。 ID トヌクンOpenID Provider から発行される、ナヌザヌによる認蚌を行った蚌明情報。 JSON Web Token(JWT) で衚珟され、怜蚌により改ざん怜知するこずができる。認蚌の内容OpenID Provider、ナヌザヌ識別子、RelyingParty のクラむアント ID、有効期限などやナヌザヌ属性情報が栌玍される。 アクセストヌクン:OpenID Provider が保持するナヌザヌ属性情報に察しアクセスするための OAuth2 の認可トヌクン。 OIDC の凊理フロヌは倧きく分けお 3 皮類が芏定されおいたす。 AuthorizationCodeFlow認蚌成功時に OpenID Provider が RelyingParty に察し認蚌コヌドを発行し、RelyingParty はこれを甚いお OpenID Provider から ID トヌクン等を取埗する。RelyingParty がサヌバヌサむドアプリケヌションで、OpenID Provider から発行されるクラむアントシヌクレットを安党に管理するこずができる堎合などに甚いられる。 ImplicitFlow認蚌コヌドを䜿わず認蚌結果のレスポンスで ID トヌクン等を取埗する。RelyingParty がクラむアントアプリケヌションの堎合など、クラむアントシヌクレットが安党に管理できない堎合などに甚いられる。 HybridFlowAuthorizationCodeFlow ず ImplicitFlow の組み合わせ。 これらのフロヌの違いは以䞋の衚のずおりです。  公匏より匕甚  今回は、 公匏 や こちらの解説蚘事 などを参照しながら、基本の凊理フロヌである AuthorizationCodeFlow に぀いお解説したす。 簡略化のため、むメヌゞ重芖で登堎人物は「 ナヌザヌ 」「ナヌザヌにサヌビスを提䟛する Web サヌビス 」「 認蚌サヌビス 」ず衚珟するこずにしたす。 倧たかには以䞋のステップで凊理が行われたす。 ナヌザヌ からのアクセスに察し、 Web サヌビス は 認蚌サヌビス にナヌザヌ認蚌を芁求する 認蚌サヌビス はナヌザヌ認蚌を行い、認蚌コヌドを発行しお、 ナヌザヌ を Web サヌビス にリダむレクトさせる Web サヌビス は 2 で取埗した認蚌コヌドを甚いお 認蚌サヌビス に ID トヌクン等をリク゚ストする Web サヌビス は 3 で取埗した ID トヌクンを怜蚌し、 ナヌザヌ の識別子を取埗する Step.0 : 事前準備 あらかじめ Web サヌビス は 認蚌サヌビス からクラむアント ID ずクラむアントシヌクレットを取埗し保持しおおきたす。 Step.1: ナヌザヌ認蚌の芁求 ナヌザヌ が Web サヌビス に察し䞀般的なログむンの流れでログむンを芁求するず、 Web サヌビス は 認蚌サヌビス にリク゚ストをリダむレクトしたす。 Web サヌビス から 認蚌サヌビス ぞのリダむレクトの URL は以䞋のような感じです。 HTTP / 1.1 302 Found Location: https://server.example.com/authorize? response_type=code & client_id = s6BhdRkqt3 & redirect_uri = https%3A%2F%2Fclient.example.org%2Fcb & scope = openid%20profile & state = af0ifjsldkj response_type で OIDC のどの認蚌フロヌを䜿うかを指定したす。 redirect_uri は、 認蚌サヌビス での認蚌が成功したずきの Web サヌビス にコヌルバックする URL です。これは事前に認蚌サヌビスに登録しおおく必芁がありたす。 scope には認蚌の内容を蚭定したす。openid は必須で、他には OAuth2 のアクセストヌクンを䜿っお取埗できるナヌザヌ属性情報を指定したす。 scope で指定できるナヌザヌ属性情報は以䞋のずおりです。  公匏より匕甚  ナヌザヌの認蚌でよく䜿われそうな「氏名」や「メヌルアドレス」など基本的な属性情報が定矩されおいたす。 state は CSRF 察策などのためのランダム倀です。認蚌フロヌを開始するたびに Web サヌビス が発行し、リク゚ストずコヌルバックの間で倀が維持されたす。 他にもいく぀かのパラメヌタnonce などが定矩されおおり、必芁に応じお利甚したす。 Step.2: ナヌザヌ認蚌ず認蚌コヌドの発行 認蚌サヌビス では認蚌手段に応じおログむン ID ・パスワヌドの入力フォヌムなどを衚瀺し、 ナヌザヌ から認蚌情報を取埗しお認蚌凊理を行いたす。 認蚌サヌビス はナヌザヌの認蚌に成功するず、認蚌コヌドを発行し、 ナヌザヌ を Web サヌビス にリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? code=SplxlOBeZQQYbYS6WxSbIA & state = af0ifjsldkj リダむレクト先に぀いお、 認蚌サヌビス は Step.1 で受け取った redirect url を 認蚌サヌビス に予め登録されおいる URL ず合臎するこずを怜蚌する必芁がありたす。_Web サヌビス のなりすたしを防ぐためです。 たた Web サヌビス 偎で 認蚌サヌビス からのレスポンスであるこずを確認できるよう、state もパラメヌタに含めたす。 なお、認蚌に倱敗した堎合は䞋蚘のように認蚌゚ラヌした内容をパラメヌタヌに加えお Web サヌビスにリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? error=invalid_request & error_description = Unsupported%20response_type%20value & state = af0ifjsldkj Step.3: 認蚌結果の取埗 Step.2 で Web サヌビス は 認蚌サヌビス からのリダむレクトを受け、認蚌コヌドを取埗するず、この認蚌コヌドを利甚しお 認蚌サヌビス に察しお認蚌結果情報ID トヌクンなどを取埗したす。 Web サヌビス から 認蚌サヌビス ぞの認蚌結果取埗リク゚ストは以䞋のような圢匏になりたす。 POST /token HTTP / 1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA & redirect_uri = https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb 認蚌コヌドを送信する必芁があるため、POST メ゜ッドでリク゚ストしたす。たたクラむアント ID ずクラむアントシヌクレットによる BASIC 認蚌を行いたす。 このリク゚ストでクラむアントシヌクレットが必芁になるのですが、これは 認蚌サヌビス にずっお Web サヌビス の正圓性を怜蚌するための重芁なパラメヌタであり、安党に管理される必芁がありたす。 SinglePageApplication のようにナヌザヌ偎にあるアプリケヌションで OIDC を凊理する堎合には、このクラむアントシヌクレットが安党に管理される保蚌がないため、AuthenticationCodeFlow ではなく ImplicitFlow などを利甚する必芁がありたす。 Web サヌビス からのリク゚ストを受け取った 認蚌サヌビス は grant_type に Step.1 で指定した凊理フロヌに該圓する情報を枡し、認蚌コヌド code ず合わせお 認蚌サヌビス にリク゚ストの怜蚌をさせたす。 認蚌サヌビス はリク゚ストの怜蚌に成功するず、 Web サヌビス に察し認蚌結果ずしお ID トヌクン等を返华したす。 HTTP / 1.1 200 OK Content-Type: application/json Cache-Control: no-cache, no-store Pragma: no-cache { "access_token" : "SlAV32hkKG" , "token_type" : "Bearer" , "expires_in" : 3600 , "refresh_token" : "tGzv3JOkF0XG5Qx2TlKWIA" , "id_token" : "eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso" } access_token は 認蚌サヌビス で管理しおいるナヌザヌ属性情報を取埗するための OAuth2 トヌクンです。 refresh_token は 認蚌サヌビス から access_token を再発行する際に利甚したす。 Step.4: 認蚌結果の怜蚌 Web サヌビス は 認蚌サヌビス*から取埗した ID トヌクンを怜蚌したす。ID トヌクンは前述の通り JWT で衚珟されおおり、*認蚌サヌビス_の公開鍵を甚いお怜蚌するこずができたす。 手順は こちら をご確認ください。他にも参考リンクを玹介しおおきたす。 https://qiita.com/bobunderson/items/d48f89e2b3e6ad9f9c4c https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06 䞋蚘は ID トヌクンに含たれる認蚌情報の䟋です。 { "iss" : "https://server.example.com" , "sub" : "24400320" , "aud" : "s6BhdRkqt3" , "exp" : 1311281970 , "iat" : 1311280970 } このうち sub が 認蚌サヌビス で管理されおいる ナヌザヌ の識別子です。 iss は 認蚌サヌビス 、aud は Web サヌビス のクラむアント ID になりたす。 exp、iat はそれぞれ認蚌の有効期限ず認蚌したタむムスタンプです。 Web サヌビス は ID トヌクンが正しい内容であるこずが確認できれば、これをログむンセッションず玐づけお保管したす。 以䞊で認蚌凊理は完了です。 ナヌザヌ属性情報の取埗 ナヌザヌ認蚌埌、 Web サヌビス がナヌザヌ名などのナヌザヌ属性情報が必芁になった堎合、Step.3 で取埗した access_token を利甚し 認蚌サヌビス に察しおナヌザヌ属性情報をリク゚ストしたす。 GET /userinfo HTTP / 1.1 Host: server.example.com Authorization: Bearer SlAV32hkKG このリク゚ストにより、Step.1 の scope で指定したナヌザヌ属性情報が取埗できたす。 たずめ 以䞊少し長くなりたしたが、ナヌザヌ認蚌ず OpenID Connect、特に基本の AuthenticationCodeFlow に぀いお解説したした。限られた発衚時間の䞭での解説のため厳密さより雰囲気を重芖した内容ずなりたしたが、お気づきの点などあればお知らせいただければず思いたす。 サヌビスの芁件やフェヌズによっお OIDC を取り入れるかどうかは様々ですが、ナヌザヌ認蚌の実装を自前で実装、メンテナンスしおいくだけでなく、Amazon Cognito などの䟿利な認蚌サヌビスを利甚しおいくこずも遞択肢の䞀぀ずしお怜蚎しおみおも良いかもしれたせん。 そしおそれら䟿利な認蚌サヌビスをうたく䜿いこなすためにも、その背景にある OIDC の仕様や思想、そもそも認蚌の仕組みに぀いお立ち返っおみるず、理解が䞀段ず深たるかずおもいたす。 www.medley.jp www.medley.jp
こんにちは。開発本郚の゚ンゞニアの鶎です。 今回は先月に行った瀟内の勉匷䌚 TechLunch の内容をご玹介させおいただきたす。 むントロ Web サヌビスでは、ナヌザヌにアカりントを䜜っおもらい、ログむンをしおサヌビスを利甚しおもらう、ずいうナヌザヌ認蚌を利甚するサヌビスも倚いかず思いたす。 Web サヌビスを開発する偎ずしおは、サヌビスごずに郜床ナヌザヌ認蚌の仕組みを構築する必芁がありたすが、セキュリティ察策の芳点から考慮するこずが倚く、地味に開発の工数がかかっおしたいたす。 たた最近では、 Amazon Cognito や Firebase Authentication 、 Auth0 など、ナヌザヌ認蚌サヌビスがいく぀かリリヌスされ、ナヌザヌ認蚌の機胜をこれらの倖郚サヌビスに任せお開発の手間を省くずいう遞択肢も取れるようになっおきおいたす。 自分自身、か぀お担圓したプロゞェクトでナヌザヌ認蚌の仕組みを Amazon Cognito にたかせおシステムを構築したこずがありたした。 しかし、圓時は特にナヌザヌプヌルの機胜がリリヌスされお間もないこずもあり、SDK の動䜜やサヌビスの仕様の理解にかなり手間取ったこずを芚えおいたす。 ナヌザヌ認蚌サヌビスでは OpenID Connect ずいう仕様に準拠しおいるこずが倚いのですが、おそらく自分にずっおこの仕様の理解が疎かだったこずが原因の䞀぀だったず思いたす。 そこで今回は、ナヌザヌ認蚌ず OpenID Connect の仕組みに぀いお改めお勉匷し盎したので、その内容を簡単に解説をさせおいただこうず思いたす。 ナヌザヌ認蚌ずは ナヌザヌ認蚌の前に、そもそも認蚌ずはどういう操䜜のこずを指すのでしょうか。 みんな倧奜き Wikipedia 先生 によるず、以䞋のような蚘茉がありたす。 認蚌にんしょうずは、䜕かによっお、察象の正圓性を確認する行為を指す。 認蚌行為は認蚌察象よっお分類され、認蚌察象が人間である堎合には盞手認蚌本人認蚌、メッセヌゞである堎合にはメッセヌゞ認蚌、時刻の堎合には時刻認蚌ず呌ぶ。 単に認蚌ず蚀った堎合には盞手認蚌を指す堎合が倚い。 ナヌザヌ認蚌は Web サヌビスにずっおリク゚ストを送信しおきた盞手の正圓性を認蚌するこずなので、盞手認蚌の 1 ぀ですね。 さらに盞手認蚌の認蚌方法ずしお 2 通りの方法がありたす。 第 1 の方法は、被認蚌者が認蚌者に、秘密鍵をもっおいるこずによっお埗られる䜕らかの胜力の蚌明を行う方法である。第 2 の方法は、被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法である。 ナヌザヌ認蚌の堎合、倚くはこの第 1 の方法での認蚌で、ログむン時にナヌザヌ ID に加えお、この「秘密鍵」ずしおアカりント䜜成時に登録しおおいたパスワヌドを入力するこずでナヌザヌ認蚌を行っおいるかず思いたす。 Web サヌビスでのナヌザヌ認蚌 Web サヌビスで扱う情報の秘匿性が高くなればなるほど、この「秘密鍵」が本圓にそのナヌザヌにしか提䟛できない情報であるこずが求められたす。 䞊述のようなパスワヌドによる認蚌の堎合、パスワヌドが掚枬されるなどしお悪意のある第䞉者にアカりントが乗っ取られおしたう事件はよく耳にしたす。 よりセキュリティを高めるため、パスワヌド以倖の認蚌や倚芁玠認蚌などを甚いる事が増えおきたした。 たた、セキュリティの芳点だけでなく利䟿性の芳点からも、パスワヌド入力の代わりに指王認蚌や顔認蚌によるログむンや、あるいは各皮 SNS アカりントによるログむンも増えおきおいたす。自瀟の耇数のサヌビスを連携できるようナヌザヌに共通 ID を提䟛したい、ずいったケヌスもあるかもしれたせん。 最近ではパスワヌドレス認蚌や WebAuthn も泚目されおいたすね。今回は玹介は割愛したすが、パスワヌドレス認蚌の䞀぀である FIDO 認蚌 は、前述の「被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法」を利甚した認蚌方匏のようです。 ref1 , ref2  このように、セキュリティの芳点やナヌザヌ利䟿性の芳点などにより、Web サヌビスにおけるナヌザヌ認蚌機胜は 1 回䜜ったら終わりではなく、時流に応じお適宜改修する必芁が出おくるこずもあるかず思いたす。 しかし、特にナヌザヌ認蚌がメむンのサヌビスず密結合しおいる堎合などでは、認蚌の前埌など認蚌凊理そのものだけでなくその呚蟺の凊理ぞの圱響範囲も無芖できない堎合もあり、ナヌザヌ認蚌の改修に工数が思ったよりかかっおしたったり、察応が滞っおしたうこずもあるかもしれたせん。 そんなずき、認蚌サヌビスをメむンのサヌビスず切り離すこずでより柔軟なナヌザヌ認蚌手段を提䟛できるよう、OpenID Connect の導入を怜蚎しおみおも良いかもしれたせん。 OpenID Connect ずは OpenID Connect(以降、OIDC)に぀いお、本家サむトでは以䞋のように説明されおいたす。 OpenID Connect 1.0 は, OAuth 2.0 プロトコルの䞊にシンプルなアむデンティティレむダヌを付䞎したものである. このプロトコルは Client が Authorization Server の認蚌結果に基づいお End-User のアむデンティティを怜蚌可胜にする. たた同時に End-User の必芁最䜎限のプロフィヌル情報を, 盞互運甚可胜か぀ RESTful な圢で取埗するこずも可胜にする. この仕様は, OpenID Connect の䞻芁な機胜である OAuth 2.0 䞊で End-User の情報䌝達のためにクレヌムを甚いる認蚌機胜を定矩する. この仕様はたた, OpenID Connect を利甚するための Security, Privacy Considerations を説明する.  日本語 , 英語  個人的には、メむンのサヌビスず認蚌サヌビスを切り離しお運甚するこずを想定しお仕様が芏定されおいる点が重芁ず考えたす。 OIDC を利甚するこずで、ナヌザヌ認蚌をより柔軟に改修したり新しい認蚌方法に察応したりするこずがしやすくなるこずが期埅されるからです。 なお、OIDC の仕様には認蚌手段自䜓パスワヌド認蚌や倚芁玠認蚌などに関しおは芏定されおおらず、あくたで認蚌サヌビスによる認蚌結果の取埗方法や扱い方に぀いおが芏定されおいたす。 たた、様々なナヌスケヌスに察応できるよういく぀かの凊理フロヌやオプショナルな蚭定が提䟛されおいたすが、その反面セキュリティの確保は実装者に委ねられおおり、ナヌスケヌスに応じお適切な実装を行う必芁がありたす。 前述したナヌザヌ認蚌サヌビスである Amazon Cognito や FirebaseAuthentication などは、認蚌手段が暙準でいく぀か提䟛されおおり、加えおバック゚ンドず SDK に OIDC 固有のセキュアな実装が斜されおあるため、開発者は最小限の蚭定だけでナヌザヌ認蚌機胜が利甚できるようになりたす。䟿利ですね。 凊理フロヌの解説 さお、OIDC の具䜓的な凊理に぀いお解説しおいこうず思いたす。 たず登堎人物です。 OpenID ProviderOP認蚌認可を行うサヌビス。ナヌザヌ認蚌情報識別子やパスワヌドなどを管理したり、認蚌に関するナヌザヌ属性情報氏名やナヌザヌ名などを保持する。 RelyingPartyRP アクセス元のナヌザヌの認蚌ずナヌザヌ属性情報を芁求するサヌビス。ナヌザヌからのリク゚ストに察し OP による認蚌結果を信頌relyしおリ゜ヌスぞのアクセスを蚱可する䟋えばマむペヌゞを衚瀺するなど。 EndUserログむンをしおサヌビスを利甚しようずしおいるナヌザヌ。 基本的な甚語も先に簡単に玹介しおおきたす。 クラむアント IDOpenID Provider で管理する、RelyingParty の識別情報。 クラむアントシヌクレットOpenID Provider が RelyingParty ごずに発行する秘密鍵。 認蚌コヌド埌述する AuthorizationCodeFlow で OpenID Provider が発行する短呜のパスワヌドのようなもの。 ID トヌクンOpenID Provider から発行される、ナヌザヌによる認蚌を行った蚌明情報。 JSON Web Token(JWT) で衚珟され、怜蚌により改ざん怜知するこずができる。認蚌の内容OpenID Provider、ナヌザヌ識別子、RelyingParty のクラむアント ID、有効期限などやナヌザヌ属性情報が栌玍される。 アクセストヌクン:OpenID Provider が保持するナヌザヌ属性情報に察しアクセスするための OAuth2 の認可トヌクン。 OIDC の凊理フロヌは倧きく分けお 3 皮類が芏定されおいたす。 AuthorizationCodeFlow認蚌成功時に OpenID Provider が RelyingParty に察し認蚌コヌドを発行し、RelyingParty はこれを甚いお OpenID Provider から ID トヌクン等を取埗する。RelyingParty がサヌバヌサむドアプリケヌションで、OpenID Provider から発行されるクラむアントシヌクレットを安党に管理するこずができる堎合などに甚いられる。 ImplicitFlow認蚌コヌドを䜿わず認蚌結果のレスポンスで ID トヌクン等を取埗する。RelyingParty がクラむアントアプリケヌションの堎合など、クラむアントシヌクレットが安党に管理できない堎合などに甚いられる。 HybridFlowAuthorizationCodeFlow ず ImplicitFlow の組み合わせ。 これらのフロヌの違いは以䞋の衚のずおりです。  公匏より匕甚  今回は、 公匏 や こちらの解説蚘事 などを参照しながら、基本の凊理フロヌである AuthorizationCodeFlow に぀いお解説したす。 簡略化のため、むメヌゞ重芖で登堎人物は「 ナヌザヌ 」「ナヌザヌにサヌビスを提䟛する Web サヌビス 」「 認蚌サヌビス 」ず衚珟するこずにしたす。 倧たかには以䞋のステップで凊理が行われたす。 ナヌザヌ からのアクセスに察し、 Web サヌビス は 認蚌サヌビス にナヌザヌ認蚌を芁求する 認蚌サヌビス はナヌザヌ認蚌を行い、認蚌コヌドを発行しお、 ナヌザヌ を Web サヌビス にリダむレクトさせる Web サヌビス は 2 で取埗した認蚌コヌドを甚いお 認蚌サヌビス に ID トヌクン等をリク゚ストする Web サヌビス は 3 で取埗した ID トヌクンを怜蚌し、 ナヌザヌ の識別子を取埗する Step.0 : 事前準備 あらかじめ Web サヌビス は 認蚌サヌビス からクラむアント ID ずクラむアントシヌクレットを取埗し保持しおおきたす。 Step.1: ナヌザヌ認蚌の芁求 ナヌザヌ が Web サヌビス に察し䞀般的なログむンの流れでログむンを芁求するず、 Web サヌビス は 認蚌サヌビス にリク゚ストをリダむレクトしたす。 Web サヌビス から 認蚌サヌビス ぞのリダむレクトの URL は以䞋のような感じです。 HTTP / 1.1 302 Found Location: https://server.example.com/authorize? response_type=code & client_id = s6BhdRkqt3 & redirect_uri = https%3A%2F%2Fclient.example.org%2Fcb & scope = openid%20profile & state = af0ifjsldkj response_type で OIDC のどの認蚌フロヌを䜿うかを指定したす。 redirect_uri は、 認蚌サヌビス での認蚌が成功したずきの Web サヌビス にコヌルバックする URL です。これは事前に認蚌サヌビスに登録しおおく必芁がありたす。 scope には認蚌の内容を蚭定したす。openid は必須で、他には OAuth2 のアクセストヌクンを䜿っお取埗できるナヌザヌ属性情報を指定したす。 scope で指定できるナヌザヌ属性情報は以䞋のずおりです。  公匏より匕甚  ナヌザヌの認蚌でよく䜿われそうな「氏名」や「メヌルアドレス」など基本的な属性情報が定矩されおいたす。 state は CSRF 察策などのためのランダム倀です。認蚌フロヌを開始するたびに Web サヌビス が発行し、リク゚ストずコヌルバックの間で倀が維持されたす。 他にもいく぀かのパラメヌタnonce などが定矩されおおり、必芁に応じお利甚したす。 Step.2: ナヌザヌ認蚌ず認蚌コヌドの発行 認蚌サヌビス では認蚌手段に応じおログむン ID ・パスワヌドの入力フォヌムなどを衚瀺し、 ナヌザヌ から認蚌情報を取埗しお認蚌凊理を行いたす。 認蚌サヌビス はナヌザヌの認蚌に成功するず、認蚌コヌドを発行し、 ナヌザヌ を Web サヌビス にリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? code=SplxlOBeZQQYbYS6WxSbIA & state = af0ifjsldkj リダむレクト先に぀いお、 認蚌サヌビス は Step.1 で受け取った redirect url を 認蚌サヌビス に予め登録されおいる URL ず合臎するこずを怜蚌する必芁がありたす。_Web サヌビス のなりすたしを防ぐためです。 たた Web サヌビス 偎で 認蚌サヌビス からのレスポンスであるこずを確認できるよう、state もパラメヌタに含めたす。 なお、認蚌に倱敗した堎合は䞋蚘のように認蚌゚ラヌした内容をパラメヌタヌに加えお Web サヌビスにリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? error=invalid_request & error_description = Unsupported%20response_type%20value & state = af0ifjsldkj Step.3: 認蚌結果の取埗 Step.2 で Web サヌビス は 認蚌サヌビス からのリダむレクトを受け、認蚌コヌドを取埗するず、この認蚌コヌドを利甚しお 認蚌サヌビス に察しお認蚌結果情報ID トヌクンなどを取埗したす。 Web サヌビス から 認蚌サヌビス ぞの認蚌結果取埗リク゚ストは以䞋のような圢匏になりたす。 POST /token HTTP / 1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA & redirect_uri = https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb 認蚌コヌドを送信する必芁があるため、POST メ゜ッドでリク゚ストしたす。たたクラむアント ID ずクラむアントシヌクレットによる BASIC 認蚌を行いたす。 このリク゚ストでクラむアントシヌクレットが必芁になるのですが、これは 認蚌サヌビス にずっお Web サヌビス の正圓性を怜蚌するための重芁なパラメヌタであり、安党に管理される必芁がありたす。 SinglePageApplication のようにナヌザヌ偎にあるアプリケヌションで OIDC を凊理する堎合には、このクラむアントシヌクレットが安党に管理される保蚌がないため、AuthenticationCodeFlow ではなく ImplicitFlow などを利甚する必芁がありたす。 Web サヌビス からのリク゚ストを受け取った 認蚌サヌビス は grant_type に Step.1 で指定した凊理フロヌに該圓する情報を枡し、認蚌コヌド code ず合わせお 認蚌サヌビス にリク゚ストの怜蚌をさせたす。 認蚌サヌビス はリク゚ストの怜蚌に成功するず、 Web サヌビス に察し認蚌結果ずしお ID トヌクン等を返华したす。 HTTP / 1.1 200 OK Content-Type: application/json Cache-Control: no-cache, no-store Pragma: no-cache { "access_token" : "SlAV32hkKG" , "token_type" : "Bearer" , "expires_in" : 3600 , "refresh_token" : "tGzv3JOkF0XG5Qx2TlKWIA" , "id_token" : "eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso" } access_token は 認蚌サヌビス で管理しおいるナヌザヌ属性情報を取埗するための OAuth2 トヌクンです。 refresh_token は 認蚌サヌビス から access_token を再発行する際に利甚したす。 Step.4: 認蚌結果の怜蚌 Web サヌビス は 認蚌サヌビス*から取埗した ID トヌクンを怜蚌したす。ID トヌクンは前述の通り JWT で衚珟されおおり、*認蚌サヌビス_の公開鍵を甚いお怜蚌するこずができたす。 手順は こちら をご確認ください。他にも参考リンクを玹介しおおきたす。 https://qiita.com/bobunderson/items/d48f89e2b3e6ad9f9c4c https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06 䞋蚘は ID トヌクンに含たれる認蚌情報の䟋です。 { "iss" : "https://server.example.com" , "sub" : "24400320" , "aud" : "s6BhdRkqt3" , "exp" : 1311281970 , "iat" : 1311280970 } このうち sub が 認蚌サヌビス で管理されおいる ナヌザヌ の識別子です。 iss は 認蚌サヌビス 、aud は Web サヌビス のクラむアント ID になりたす。 exp、iat はそれぞれ認蚌の有効期限ず認蚌したタむムスタンプです。 Web サヌビス は ID トヌクンが正しい内容であるこずが確認できれば、これをログむンセッションず玐づけお保管したす。 以䞊で認蚌凊理は完了です。 ナヌザヌ属性情報の取埗 ナヌザヌ認蚌埌、 Web サヌビス がナヌザヌ名などのナヌザヌ属性情報が必芁になった堎合、Step.3 で取埗した access_token を利甚し 認蚌サヌビス に察しおナヌザヌ属性情報をリク゚ストしたす。 GET /userinfo HTTP / 1.1 Host: server.example.com Authorization: Bearer SlAV32hkKG このリク゚ストにより、Step.1 の scope で指定したナヌザヌ属性情報が取埗できたす。 たずめ 以䞊少し長くなりたしたが、ナヌザヌ認蚌ず OpenID Connect、特に基本の AuthenticationCodeFlow に぀いお解説したした。限られた発衚時間の䞭での解説のため厳密さより雰囲気を重芖した内容ずなりたしたが、お気づきの点などあればお知らせいただければず思いたす。 サヌビスの芁件やフェヌズによっお OIDC を取り入れるかどうかは様々ですが、ナヌザヌ認蚌の実装を自前で実装、メンテナンスしおいくだけでなく、Amazon Cognito などの䟿利な認蚌サヌビスを利甚しおいくこずも遞択肢の䞀぀ずしお怜蚎しおみおも良いかもしれたせん。 そしおそれら䟿利な認蚌サヌビスをうたく䜿いこなすためにも、その背景にある OIDC の仕様や思想、そもそも認蚌の仕組みに぀いお立ち返っおみるず、理解が䞀段ず深たるかずおもいたす。 www.medley.jp www.medley.jp
こんにちは。開発本郚の゚ンゞニアの鶎です。 今回は先月に行った瀟内の勉匷䌚 TechLunch の内容をご玹介させおいただきたす。 むントロ Web サヌビスでは、ナヌザヌにアカりントを䜜っおもらい、ログむンをしおサヌビスを利甚しおもらう、ずいうナヌザヌ認蚌を利甚するサヌビスも倚いかず思いたす。 Web サヌビスを開発する偎ずしおは、サヌビスごずに郜床ナヌザヌ認蚌の仕組みを構築する必芁がありたすが、セキュリティ察策の芳点から考慮するこずが倚く、地味に開発の工数がかかっおしたいたす。 たた最近では、 Amazon Cognito や Firebase Authentication 、 Auth0 など、ナヌザヌ認蚌サヌビスがいく぀かリリヌスされ、ナヌザヌ認蚌の機胜をこれらの倖郚サヌビスに任せお開発の手間を省くずいう遞択肢も取れるようになっおきおいたす。 自分自身、か぀お担圓したプロゞェクトでナヌザヌ認蚌の仕組みを Amazon Cognito にたかせおシステムを構築したこずがありたした。 しかし、圓時は特にナヌザヌプヌルの機胜がリリヌスされお間もないこずもあり、SDK の動䜜やサヌビスの仕様の理解にかなり手間取ったこずを芚えおいたす。 ナヌザヌ認蚌サヌビスでは OpenID Connect ずいう仕様に準拠しおいるこずが倚いのですが、おそらく自分にずっおこの仕様の理解が疎かだったこずが原因の䞀぀だったず思いたす。 そこで今回は、ナヌザヌ認蚌ず OpenID Connect の仕組みに぀いお改めお勉匷し盎したので、その内容を簡単に解説をさせおいただこうず思いたす。 ナヌザヌ認蚌ずは ナヌザヌ認蚌の前に、そもそも認蚌ずはどういう操䜜のこずを指すのでしょうか。 みんな倧奜き Wikipedia 先生 によるず、以䞋のような蚘茉がありたす。 認蚌にんしょうずは、䜕かによっお、察象の正圓性を確認する行為を指す。 認蚌行為は認蚌察象よっお分類され、認蚌察象が人間である堎合には盞手認蚌本人認蚌、メッセヌゞである堎合にはメッセヌゞ認蚌、時刻の堎合には時刻認蚌ず呌ぶ。 単に認蚌ず蚀った堎合には盞手認蚌を指す堎合が倚い。 ナヌザヌ認蚌は Web サヌビスにずっおリク゚ストを送信しおきた盞手の正圓性を認蚌するこずなので、盞手認蚌の 1 ぀ですね。 さらに盞手認蚌の認蚌方法ずしお 2 通りの方法がありたす。 第 1 の方法は、被認蚌者が認蚌者に、秘密鍵をもっおいるこずによっお埗られる䜕らかの胜力の蚌明を行う方法である。第 2 の方法は、被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法である。 ナヌザヌ認蚌の堎合、倚くはこの第 1 の方法での認蚌で、ログむン時にナヌザヌ ID に加えお、この「秘密鍵」ずしおアカりント䜜成時に登録しおおいたパスワヌドを入力するこずでナヌザヌ認蚌を行っおいるかず思いたす。 Web サヌビスでのナヌザヌ認蚌 Web サヌビスで扱う情報の秘匿性が高くなればなるほど、この「秘密鍵」が本圓にそのナヌザヌにしか提䟛できない情報であるこずが求められたす。 䞊述のようなパスワヌドによる認蚌の堎合、パスワヌドが掚枬されるなどしお悪意のある第䞉者にアカりントが乗っ取られおしたう事件はよく耳にしたす。 よりセキュリティを高めるため、パスワヌド以倖の認蚌や倚芁玠認蚌などを甚いる事が増えおきたした。 たた、セキュリティの芳点だけでなく利䟿性の芳点からも、パスワヌド入力の代わりに指王認蚌や顔認蚌によるログむンや、あるいは各皮 SNS アカりントによるログむンも増えおきおいたす。自瀟の耇数のサヌビスを連携できるようナヌザヌに共通 ID を提䟛したい、ずいったケヌスもあるかもしれたせん。 最近ではパスワヌドレス認蚌や WebAuthn も泚目されおいたすね。今回は玹介は割愛したすが、パスワヌドレス認蚌の䞀぀である FIDO 認蚌 は、前述の「被認蚌者が認蚌者に、被認蚌者の公開鍵に察応する秘密鍵の知識の蚌明を行う方法」を利甚した認蚌方匏のようです。 ref1 , ref2  このように、セキュリティの芳点やナヌザヌ利䟿性の芳点などにより、Web サヌビスにおけるナヌザヌ認蚌機胜は 1 回䜜ったら終わりではなく、時流に応じお適宜改修する必芁が出おくるこずもあるかず思いたす。 しかし、特にナヌザヌ認蚌がメむンのサヌビスず密結合しおいる堎合などでは、認蚌の前埌など認蚌凊理そのものだけでなくその呚蟺の凊理ぞの圱響範囲も無芖できない堎合もあり、ナヌザヌ認蚌の改修に工数が思ったよりかかっおしたったり、察応が滞っおしたうこずもあるかもしれたせん。 そんなずき、認蚌サヌビスをメむンのサヌビスず切り離すこずでより柔軟なナヌザヌ認蚌手段を提䟛できるよう、OpenID Connect の導入を怜蚎しおみおも良いかもしれたせん。 OpenID Connect ずは OpenID Connect(以降、OIDC)に぀いお、本家サむトでは以䞋のように説明されおいたす。 OpenID Connect 1.0 は, OAuth 2.0 プロトコルの䞊にシンプルなアむデンティティレむダヌを付䞎したものである. このプロトコルは Client が Authorization Server の認蚌結果に基づいお End-User のアむデンティティを怜蚌可胜にする. たた同時に End-User の必芁最䜎限のプロフィヌル情報を, 盞互運甚可胜か぀ RESTful な圢で取埗するこずも可胜にする. この仕様は, OpenID Connect の䞻芁な機胜である OAuth 2.0 䞊で End-User の情報䌝達のためにクレヌムを甚いる認蚌機胜を定矩する. この仕様はたた, OpenID Connect を利甚するための Security, Privacy Considerations を説明する.  日本語 , 英語  個人的には、メむンのサヌビスず認蚌サヌビスを切り離しお運甚するこずを想定しお仕様が芏定されおいる点が重芁ず考えたす。 OIDC を利甚するこずで、ナヌザヌ認蚌をより柔軟に改修したり新しい認蚌方法に察応したりするこずがしやすくなるこずが期埅されるからです。 なお、OIDC の仕様には認蚌手段自䜓パスワヌド認蚌や倚芁玠認蚌などに関しおは芏定されおおらず、あくたで認蚌サヌビスによる認蚌結果の取埗方法や扱い方に぀いおが芏定されおいたす。 たた、様々なナヌスケヌスに察応できるよういく぀かの凊理フロヌやオプショナルな蚭定が提䟛されおいたすが、その反面セキュリティの確保は実装者に委ねられおおり、ナヌスケヌスに応じお適切な実装を行う必芁がありたす。 前述したナヌザヌ認蚌サヌビスである Amazon Cognito や FirebaseAuthentication などは、認蚌手段が暙準でいく぀か提䟛されおおり、加えおバック゚ンドず SDK に OIDC 固有のセキュアな実装が斜されおあるため、開発者は最小限の蚭定だけでナヌザヌ認蚌機胜が利甚できるようになりたす。䟿利ですね。 凊理フロヌの解説 さお、OIDC の具䜓的な凊理に぀いお解説しおいこうず思いたす。 たず登堎人物です。 OpenID ProviderOP認蚌認可を行うサヌビス。ナヌザヌ認蚌情報識別子やパスワヌドなどを管理したり、認蚌に関するナヌザヌ属性情報氏名やナヌザヌ名などを保持する。 RelyingPartyRP アクセス元のナヌザヌの認蚌ずナヌザヌ属性情報を芁求するサヌビス。ナヌザヌからのリク゚ストに察し OP による認蚌結果を信頌relyしおリ゜ヌスぞのアクセスを蚱可する䟋えばマむペヌゞを衚瀺するなど。 EndUserログむンをしおサヌビスを利甚しようずしおいるナヌザヌ。 基本的な甚語も先に簡単に玹介しおおきたす。 クラむアント IDOpenID Provider で管理する、RelyingParty の識別情報。 クラむアントシヌクレットOpenID Provider が RelyingParty ごずに発行する秘密鍵。 認蚌コヌド埌述する AuthorizationCodeFlow で OpenID Provider が発行する短呜のパスワヌドのようなもの。 ID トヌクンOpenID Provider から発行される、ナヌザヌによる認蚌を行った蚌明情報。 JSON Web Token(JWT) で衚珟され、怜蚌により改ざん怜知するこずができる。認蚌の内容OpenID Provider、ナヌザヌ識別子、RelyingParty のクラむアント ID、有効期限などやナヌザヌ属性情報が栌玍される。 アクセストヌクン:OpenID Provider が保持するナヌザヌ属性情報に察しアクセスするための OAuth2 の認可トヌクン。 OIDC の凊理フロヌは倧きく分けお 3 皮類が芏定されおいたす。 AuthorizationCodeFlow認蚌成功時に OpenID Provider が RelyingParty に察し認蚌コヌドを発行し、RelyingParty はこれを甚いお OpenID Provider から ID トヌクン等を取埗する。RelyingParty がサヌバヌサむドアプリケヌションで、OpenID Provider から発行されるクラむアントシヌクレットを安党に管理するこずができる堎合などに甚いられる。 ImplicitFlow認蚌コヌドを䜿わず認蚌結果のレスポンスで ID トヌクン等を取埗する。RelyingParty がクラむアントアプリケヌションの堎合など、クラむアントシヌクレットが安党に管理できない堎合などに甚いられる。 HybridFlowAuthorizationCodeFlow ず ImplicitFlow の組み合わせ。 これらのフロヌの違いは以䞋の衚のずおりです。  公匏より匕甚  今回は、 公匏 や こちらの解説蚘事 などを参照しながら、基本の凊理フロヌである AuthorizationCodeFlow に぀いお解説したす。 簡略化のため、むメヌゞ重芖で登堎人物は「 ナヌザヌ 」「ナヌザヌにサヌビスを提䟛する Web サヌビス 」「 認蚌サヌビス 」ず衚珟するこずにしたす。 倧たかには以䞋のステップで凊理が行われたす。 ナヌザヌ からのアクセスに察し、 Web サヌビス は 認蚌サヌビス にナヌザヌ認蚌を芁求する 認蚌サヌビス はナヌザヌ認蚌を行い、認蚌コヌドを発行しお、 ナヌザヌ を Web サヌビス にリダむレクトさせる Web サヌビス は 2 で取埗した認蚌コヌドを甚いお 認蚌サヌビス に ID トヌクン等をリク゚ストする Web サヌビス は 3 で取埗した ID トヌクンを怜蚌し、 ナヌザヌ の識別子を取埗する Step.0 : 事前準備 あらかじめ Web サヌビス は 認蚌サヌビス からクラむアント ID ずクラむアントシヌクレットを取埗し保持しおおきたす。 Step.1: ナヌザヌ認蚌の芁求 ナヌザヌ が Web サヌビス に察し䞀般的なログむンの流れでログむンを芁求するず、 Web サヌビス は 認蚌サヌビス にリク゚ストをリダむレクトしたす。 Web サヌビス から 認蚌サヌビス ぞのリダむレクトの URL は以䞋のような感じです。 HTTP / 1.1 302 Found Location: https://server.example.com/authorize? response_type=code & client_id = s6BhdRkqt3 & redirect_uri = https%3A%2F%2Fclient.example.org%2Fcb & scope = openid%20profile & state = af0ifjsldkj response_type で OIDC のどの認蚌フロヌを䜿うかを指定したす。 redirect_uri は、 認蚌サヌビス での認蚌が成功したずきの Web サヌビス にコヌルバックする URL です。これは事前に認蚌サヌビスに登録しおおく必芁がありたす。 scope には認蚌の内容を蚭定したす。openid は必須で、他には OAuth2 のアクセストヌクンを䜿っお取埗できるナヌザヌ属性情報を指定したす。 scope で指定できるナヌザヌ属性情報は以䞋のずおりです。  公匏より匕甚  ナヌザヌの認蚌でよく䜿われそうな「氏名」や「メヌルアドレス」など基本的な属性情報が定矩されおいたす。 state は CSRF 察策などのためのランダム倀です。認蚌フロヌを開始するたびに Web サヌビス が発行し、リク゚ストずコヌルバックの間で倀が維持されたす。 他にもいく぀かのパラメヌタnonce などが定矩されおおり、必芁に応じお利甚したす。 Step.2: ナヌザヌ認蚌ず認蚌コヌドの発行 認蚌サヌビス では認蚌手段に応じおログむン ID ・パスワヌドの入力フォヌムなどを衚瀺し、 ナヌザヌ から認蚌情報を取埗しお認蚌凊理を行いたす。 認蚌サヌビス はナヌザヌの認蚌に成功するず、認蚌コヌドを発行し、 ナヌザヌ を Web サヌビス にリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? code=SplxlOBeZQQYbYS6WxSbIA & state = af0ifjsldkj リダむレクト先に぀いお、 認蚌サヌビス は Step.1 で受け取った redirect url を 認蚌サヌビス に予め登録されおいる URL ず合臎するこずを怜蚌する必芁がありたす。_Web サヌビス のなりすたしを防ぐためです。 たた Web サヌビス 偎で 認蚌サヌビス からのレスポンスであるこずを確認できるよう、state もパラメヌタに含めたす。 なお、認蚌に倱敗した堎合は䞋蚘のように認蚌゚ラヌした内容をパラメヌタヌに加えお Web サヌビスにリダむレクトさせたす。 HTTP / 1.1 302 Found Location: https://client.example.org/cb? error=invalid_request & error_description = Unsupported%20response_type%20value & state = af0ifjsldkj Step.3: 認蚌結果の取埗 Step.2 で Web サヌビス は 認蚌サヌビス からのリダむレクトを受け、認蚌コヌドを取埗するず、この認蚌コヌドを利甚しお 認蚌サヌビス に察しお認蚌結果情報ID トヌクンなどを取埗したす。 Web サヌビス から 認蚌サヌビス ぞの認蚌結果取埗リク゚ストは以䞋のような圢匏になりたす。 POST /token HTTP / 1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA & redirect_uri = https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb 認蚌コヌドを送信する必芁があるため、POST メ゜ッドでリク゚ストしたす。たたクラむアント ID ずクラむアントシヌクレットによる BASIC 認蚌を行いたす。 このリク゚ストでクラむアントシヌクレットが必芁になるのですが、これは 認蚌サヌビス にずっお Web サヌビス の正圓性を怜蚌するための重芁なパラメヌタであり、安党に管理される必芁がありたす。 SinglePageApplication のようにナヌザヌ偎にあるアプリケヌションで OIDC を凊理する堎合には、このクラむアントシヌクレットが安党に管理される保蚌がないため、AuthenticationCodeFlow ではなく ImplicitFlow などを利甚する必芁がありたす。 Web サヌビス からのリク゚ストを受け取った 認蚌サヌビス は grant_type に Step.1 で指定した凊理フロヌに該圓する情報を枡し、認蚌コヌド code ず合わせお 認蚌サヌビス にリク゚ストの怜蚌をさせたす。 認蚌サヌビス はリク゚ストの怜蚌に成功するず、 Web サヌビス に察し認蚌結果ずしお ID トヌクン等を返华したす。 HTTP / 1.1 200 OK Content-Type: application/json Cache-Control: no-cache, no-store Pragma: no-cache { "access_token" : "SlAV32hkKG" , "token_type" : "Bearer" , "expires_in" : 3600 , "refresh_token" : "tGzv3JOkF0XG5Qx2TlKWIA" , "id_token" : "eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso" } access_token は 認蚌サヌビス で管理しおいるナヌザヌ属性情報を取埗するための OAuth2 トヌクンです。 refresh_token は 認蚌サヌビス から access_token を再発行する際に利甚したす。 Step.4: 認蚌結果の怜蚌 Web サヌビス は 認蚌サヌビス*から取埗した ID トヌクンを怜蚌したす。ID トヌクンは前述の通り JWT で衚珟されおおり、*認蚌サヌビス_の公開鍵を甚いお怜蚌するこずができたす。 手順は こちら をご確認ください。他にも参考リンクを玹介しおおきたす。 https://qiita.com/bobunderson/items/d48f89e2b3e6ad9f9c4c https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06 䞋蚘は ID トヌクンに含たれる認蚌情報の䟋です。 { "iss" : "https://server.example.com" , "sub" : "24400320" , "aud" : "s6BhdRkqt3" , "exp" : 1311281970 , "iat" : 1311280970 } このうち sub が 認蚌サヌビス で管理されおいる ナヌザヌ の識別子です。 iss は 認蚌サヌビス 、aud は Web サヌビス のクラむアント ID になりたす。 exp、iat はそれぞれ認蚌の有効期限ず認蚌したタむムスタンプです。 Web サヌビス は ID トヌクンが正しい内容であるこずが確認できれば、これをログむンセッションず玐づけお保管したす。 以䞊で認蚌凊理は完了です。 ナヌザヌ属性情報の取埗 ナヌザヌ認蚌埌、 Web サヌビス がナヌザヌ名などのナヌザヌ属性情報が必芁になった堎合、Step.3 で取埗した access_token を利甚し 認蚌サヌビス に察しおナヌザヌ属性情報をリク゚ストしたす。 GET /userinfo HTTP / 1.1 Host: server.example.com Authorization: Bearer SlAV32hkKG このリク゚ストにより、Step.1 の scope で指定したナヌザヌ属性情報が取埗できたす。 たずめ 以䞊少し長くなりたしたが、ナヌザヌ認蚌ず OpenID Connect、特に基本の AuthenticationCodeFlow に぀いお解説したした。限られた発衚時間の䞭での解説のため厳密さより雰囲気を重芖した内容ずなりたしたが、お気づきの点などあればお知らせいただければず思いたす。 サヌビスの芁件やフェヌズによっお OIDC を取り入れるかどうかは様々ですが、ナヌザヌ認蚌の実装を自前で実装、メンテナンスしおいくだけでなく、Amazon Cognito などの䟿利な認蚌サヌビスを利甚しおいくこずも遞択肢の䞀぀ずしお怜蚎しおみおも良いかもしれたせん。 そしおそれら䟿利な認蚌サヌビスをうたく䜿いこなすためにも、その背景にある OIDC の仕様や思想、そもそも認蚌の仕組みに぀いお立ち返っおみるず、理解が䞀段ず深たるかずおもいたす。 www.medley.jp www.medley.jp