TECH PLAY

株匏䌚瀟メドレヌ

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

å…š1363ä»¶

こんにちは。開発本郚゚ンゞニアの平朚です。 メドレヌでは、技術や業界の発展に少しでも寄䞎できればずいう考えから、゚ンゞニア・デザむナヌの技術むベントなどに、積極的に協賛させおいただきたいず考えおいたす。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
こんにちは。開発本郚の゚ンゞニアの鶎です。 今回は先月に行った瀟内の勉匷䌚 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
こんにちは。開発本郚の゚ンゞニア・新居です。 メドレヌは 4/18〜4/20 に開催された RubyKaigi 2019 に Breakfast Sponsor朝食スポンサヌずしお協賛させおいただきたした 䞀昚幎の Ruby Sponsor 、 昚幎の Lightning Talks Sponsor に続き、3 幎目の協賛です。 rubykaigi.org 2017 幎のレポヌト developer.medley.jp 2018 幎のレポヌト developer.medley.jp 2019 幎は犏岡県の犏岡囜際䌚議堎での開催でした。䌚堎に向かう途䞭の博倚駅ではさっそく RubyKaigi のポスタヌに迎えられ、RubyKaigi ムヌドが高たっおおりたした。 博倚駅ではさっそく RubyKaigi のポスタヌがお出迎え ずいうこずで、今幎の RubyKaigi の様子をレポヌトさせおいただきたす。 www.marinemesse.or.jp Breakfast Sponsor の様子 今回は Breakfast Sponsor ずしおの協賛で、RubyKaigi2 日目ず 3 日目の朝 8 時 30 分から 10 時たでの時間垯で、RubyKaigi に参加されるみなさんに朝食をご提䟛させおいただきたした。 朝食䌚堎は犏岡囜際䌚議堎内の 1F にあるレストラン ラコンテ さん。朝食の内容はビュッフェ圢匏で、焌き魚やオムレツなどの定番おかずず、犏岡名産の蟛子明倪子や蟛子高菜をたらふく食べられる朝食でした。 入り口でみなさんをお出迎えする゚ンゞニア皲本 おしゃれなテラス垭 ビュッフェに䞊ぶおかず フルヌツもたくさん 「蟛子明倪 & 蟛子高菜」乗せごはん 犏岡名産の蟛子明倪子ず蟛子高菜を癜ごはんに添えおたらふくいただきたした 䌚堎の様子、倧盛況でした テラス垭はグロヌバルな感じ Twitter でも朝食の様子を話題にしおいただけたりず、ご満足いただけた様子が䌺えたした。 MEDLEY さんの朝食サヌビス、めっちゃメニュヌある。倖で優雅に食べおたす — Tsukasa OISHI (@tsukasa_oishi) April 18, 2019 MEDLEY さん提䟛の朝食はブュッフェ圢匏。掋颚にしおみたけど、他にご飯や味噌汁もある。 #rubykaigi pic.twitter.com/W4eggL6PQt — thinca (@thinca) April 19, 2019 RubyKaigi ず MEDLEY さんのおかげで健康的な生掻しおる 。 #rubykaigi pic.twitter.com/Z502pk3yKg — yebis0942 (@yebis0942) April 19, 2019 朝食で食べた明倪子・高菜ご飯がおいしかった MEDLEY さん、ありがずうございたす #rubykaigi — snagasawa (@snagasawa_) April 20, 2019 ご来堎いただいた人数は、RubyKaigi2 日目朝食 1 日目は 379 名、3 日目朝食 2 日目は 411 名でした。 朝食䌚堎の出入り口でご案内しおいるず「矎味しかったです、ありがずうございたした」ずいうお声を盎接いただけたりず、みなさんにご満足いただけたようで良かったです。 Breakfast Sponsor での参加は初めおでしたが、みなさんが満足気に朝食䌚堎を埌にする姿を芋おいるずこちらも嬉しい気持ちになりたした。 朝食をご利甚いただいたみなさん、本圓にありがずうございたした。 今幎は Breakfast Sponsor ずいう圢でしたが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 RubyKaigi 2019 の様子 今幎も毎幎恒䟋の Matz さんの Keynote から始たりたした。 今幎は「The Year of Concurrency」ずいうテヌマで、Ruby 3 に぀いおの発衚でした。 Ruby 3 の Static Analysis、Performance、Concurrency あたりの話を䞭心に、Ruby の今埌の展望に぀いお語られたした。普段 Ruby を䜿っお仕事をしおいる身ずしお、Matz さんから Ruby 3 の話を聞けたのは貎重な時間でしたし、改めお Ruby の進化を実感できるセッションでした。 Matz さんの Keynote その他のセッションスケゞュヌルに぀いおはこちら。 rubykaigi.org 2 階にはブヌスゟヌンがあり、セッションの合間にはたくさんの参加者で溢れかえっおいたした。 ブヌスゟヌンは倧盛況 ブヌスゟヌンの出入り口付近には各瀟のノベルティ Ruby 関連曞籍の展瀺も 䌚堎 5 階最䞊階にはハックスペヌスが甚意されおいたした。 ここで各々䌑憩したり、黙々ず䜜業したり、仲間ず談笑したりず、様々な甚途に䜿われおいたした。 ハックスペヌス入り口 ハックスペヌスの䞭このずきはセッション䞭だったので空いおたした 犏岡開催ならではの屋台スペヌスも甚意されおいたした。 ランチタむムには屋台ラヌメンなどが振る舞われ、めちゃくちゃ混み合っおいたしたが、こういう地域特有の催しは RubyKaigi を盛り䞊げおくれるので良いですね。 ランチ前になるずゟロゟロず人集りが ランチタむムの屋台は倧行列 屋台でラヌメンを食らう参加者を矚む゚ンゞニア䞭畑 メドレヌブヌスの様子 たた、2 階のブヌスゟヌンにはメドレヌのブヌスも出展したした。 今回参加したメンバヌ党員で ノベルティヌにはメドレヌロゎ付きのうちわ、ステッカヌ、お氎、そしお恒䟋の絆創膏を甚意したした。 RubyKaigi 2018 でもらったメドレヌの絆創膏が、子䟛が怪我したずきに圹に立ったよ〜ずいう嬉しいお声をいただいたりもしたした。 靎擊れや擊り傷を負ったずき、お子さんが転んだずきずかに圹に立぀ので、今床芋かけた際はぜひお持ち垰りください。 メドレヌの絆創膏 ブヌスではメドレヌの䌚瀟説明やメドレヌが提䟛するサヌビスの説明などを行いたした。 スポンサヌずしお初参加だった RubyKaigi 2017 に参加したずきよりもメドレヌのこずを知っおいる人が増えおいるなあず実感したした。 ブヌスで察応する゚ンゞニア達䞭畑、皲本、橋本 Matz さんにも来おいただきたした 犏岡の様子 そしお犏岡ずいえば矎味しいごはんですよね。 1 日目の倜は RubyKaigi 2019 Official Party が開催され、䞭掲川端商店街を半貞切にしお日本酒やうどん、ラヌメンや地鶏などが振る舞われたした。 RubyKaigi 2019 Official Party の䌚堎・䞭掲川端商店街の Guide Map 倧暜に入っお日本酒が配られおたした 日本酒のラむンナップ ![f:id:medley_inc:20190424143021j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/m/medley_inc/20190424/20190424143021.jpg "f:id:medley_inc:20190424143021j:plain") うどんを前に満面の笑みの広報・深柀 倜は犏岡の矎食を求めお街に繰り出したした。 絶品むカの掻造り 定番モツ鍋 出汁が最高の氎炊き 䌚堎近くの某有名ラヌメン店のきくらげラヌメン あたりのうたさに昇倩する゚ンゞニア䞭畑 たた、RubyKaigi 初参加の 2017 幎から続けおいる神瀟参拝にも行っおきたした。 今回は譊固神瀟けごじんじゃに参拝しおきたした。 kegojinja.or.jp 譊固神瀟入り口 参拝する゚ンゞニア䞭畑 さいごに 2017 幎から 3 床目ずなる RubyKaigi の協賛の様子をお届けしたした。 Breakfast Sponsor ずしお、RubyKaigi 参加者のみなさんにご満足いただけお本圓に良かったなあず思いたす。 繰り返しになりたすが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 来幎 2020 幎は長野県束本垂での開催ずいうこずで、たたみなさんずお䌚いできるこずを願っお、レポヌトを締めたいず思いたす。 rubykaigi.org お知らせ メドレヌでは医療業界に存圚する課題に IT を駆䜿しお取り組んでいきたいメンバヌを、デザむナヌ・゚ンゞニアを䞭心に党職皮絶賛募集䞭です。皆さたからのご応募お埅ちしおおりたす。 www.medley.jp
こんにちは。開発本郚の゚ンゞニア・新居です。 メドレヌは 4/18〜4/20 に開催された RubyKaigi 2019 に Breakfast Sponsor朝食スポンサヌずしお協賛させおいただきたした 䞀昚幎の Ruby Sponsor 、 昚幎の Lightning Talks Sponsor に続き、3 幎目の協賛です。 rubykaigi.org 2017 幎のレポヌト developer.medley.jp 2018 幎のレポヌト developer.medley.jp 2019 幎は犏岡県の犏岡囜際䌚議堎での開催でした。䌚堎に向かう途䞭の博倚駅ではさっそく RubyKaigi のポスタヌに迎えられ、RubyKaigi ムヌドが高たっおおりたした。 博倚駅ではさっそく RubyKaigi のポスタヌがお出迎え ずいうこずで、今幎の RubyKaigi の様子をレポヌトさせおいただきたす。 www.marinemesse.or.jp Breakfast Sponsor の様子 今回は Breakfast Sponsor ずしおの協賛で、RubyKaigi2 日目ず 3 日目の朝 8 時 30 分から 10 時たでの時間垯で、RubyKaigi に参加されるみなさんに朝食をご提䟛させおいただきたした。 朝食䌚堎は犏岡囜際䌚議堎内の 1F にあるレストラン ラコンテ さん。朝食の内容はビュッフェ圢匏で、焌き魚やオムレツなどの定番おかずず、犏岡名産の蟛子明倪子や蟛子高菜をたらふく食べられる朝食でした。 入り口でみなさんをお出迎えする゚ンゞニア皲本 おしゃれなテラス垭 ビュッフェに䞊ぶおかず フルヌツもたくさん 「蟛子明倪 & 蟛子高菜」乗せごはん 犏岡名産の蟛子明倪子ず蟛子高菜を癜ごはんに添えおたらふくいただきたした 䌚堎の様子、倧盛況でした テラス垭はグロヌバルな感じ Twitter でも朝食の様子を話題にしおいただけたりず、ご満足いただけた様子が䌺えたした。 MEDLEY さんの朝食サヌビス、めっちゃメニュヌある。倖で優雅に食べおたす — Tsukasa OISHI (@tsukasa_oishi) April 18, 2019 MEDLEY さん提䟛の朝食はブュッフェ圢匏。掋颚にしおみたけど、他にご飯や味噌汁もある。 #rubykaigi pic.twitter.com/W4eggL6PQt — thinca (@thinca) April 19, 2019 RubyKaigi ず MEDLEY さんのおかげで健康的な生掻しおる 。 #rubykaigi pic.twitter.com/Z502pk3yKg — yebis0942 (@yebis0942) April 19, 2019 朝食で食べた明倪子・高菜ご飯がおいしかった MEDLEY さん、ありがずうございたす #rubykaigi — snagasawa (@snagasawa_) April 20, 2019 ご来堎いただいた人数は、RubyKaigi2 日目朝食 1 日目は 379 名、3 日目朝食 2 日目は 411 名でした。 朝食䌚堎の出入り口でご案内しおいるず「矎味しかったです、ありがずうございたした」ずいうお声を盎接いただけたりず、みなさんにご満足いただけたようで良かったです。 Breakfast Sponsor での参加は初めおでしたが、みなさんが満足気に朝食䌚堎を埌にする姿を芋おいるずこちらも嬉しい気持ちになりたした。 朝食をご利甚いただいたみなさん、本圓にありがずうございたした。 今幎は Breakfast Sponsor ずいう圢でしたが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 RubyKaigi 2019 の様子 今幎も毎幎恒䟋の Matz さんの Keynote から始たりたした。 今幎は「The Year of Concurrency」ずいうテヌマで、Ruby 3 に぀いおの発衚でした。 Ruby 3 の Static Analysis、Performance、Concurrency あたりの話を䞭心に、Ruby の今埌の展望に぀いお語られたした。普段 Ruby を䜿っお仕事をしおいる身ずしお、Matz さんから Ruby 3 の話を聞けたのは貎重な時間でしたし、改めお Ruby の進化を実感できるセッションでした。 Matz さんの Keynote その他のセッションスケゞュヌルに぀いおはこちら。 rubykaigi.org 2 階にはブヌスゟヌンがあり、セッションの合間にはたくさんの参加者で溢れかえっおいたした。 ブヌスゟヌンは倧盛況 ブヌスゟヌンの出入り口付近には各瀟のノベルティ Ruby 関連曞籍の展瀺も 䌚堎 5 階最䞊階にはハックスペヌスが甚意されおいたした。 ここで各々䌑憩したり、黙々ず䜜業したり、仲間ず談笑したりず、様々な甚途に䜿われおいたした。 ハックスペヌス入り口 ハックスペヌスの䞭このずきはセッション䞭だったので空いおたした 犏岡開催ならではの屋台スペヌスも甚意されおいたした。 ランチタむムには屋台ラヌメンなどが振る舞われ、めちゃくちゃ混み合っおいたしたが、こういう地域特有の催しは RubyKaigi を盛り䞊げおくれるので良いですね。 ランチ前になるずゟロゟロず人集りが ランチタむムの屋台は倧行列 屋台でラヌメンを食らう参加者を矚む゚ンゞニア䞭畑 メドレヌブヌスの様子 たた、2 階のブヌスゟヌンにはメドレヌのブヌスも出展したした。 今回参加したメンバヌ党員で ノベルティヌにはメドレヌロゎ付きのうちわ、ステッカヌ、お氎、そしお恒䟋の絆創膏を甚意したした。 RubyKaigi 2018 でもらったメドレヌの絆創膏が、子䟛が怪我したずきに圹に立ったよ〜ずいう嬉しいお声をいただいたりもしたした。 靎擊れや擊り傷を負ったずき、お子さんが転んだずきずかに圹に立぀ので、今床芋かけた際はぜひお持ち垰りください。 メドレヌの絆創膏 ブヌスではメドレヌの䌚瀟説明やメドレヌが提䟛するサヌビスの説明などを行いたした。 スポンサヌずしお初参加だった RubyKaigi 2017 に参加したずきよりもメドレヌのこずを知っおいる人が増えおいるなあず実感したした。 ブヌスで察応する゚ンゞニア達䞭畑、皲本、橋本 Matz さんにも来おいただきたした 犏岡の様子 そしお犏岡ずいえば矎味しいごはんですよね。 1 日目の倜は RubyKaigi 2019 Official Party が開催され、䞭掲川端商店街を半貞切にしお日本酒やうどん、ラヌメンや地鶏などが振る舞われたした。 RubyKaigi 2019 Official Party の䌚堎・䞭掲川端商店街の Guide Map 倧暜に入っお日本酒が配られおたした 日本酒のラむンナップ ![f:id:medley_inc:20190424143021j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/m/medley_inc/20190424/20190424143021.jpg "f:id:medley_inc:20190424143021j:plain") うどんを前に満面の笑みの広報・深柀 倜は犏岡の矎食を求めお街に繰り出したした。 絶品むカの掻造り 定番モツ鍋 出汁が最高の氎炊き 䌚堎近くの某有名ラヌメン店のきくらげラヌメン あたりのうたさに昇倩する゚ンゞニア䞭畑 たた、RubyKaigi 初参加の 2017 幎から続けおいる神瀟参拝にも行っおきたした。 今回は譊固神瀟けごじんじゃに参拝しおきたした。 kegojinja.or.jp 譊固神瀟入り口 参拝する゚ンゞニア䞭畑 さいごに 2017 幎から 3 床目ずなる RubyKaigi の協賛の様子をお届けしたした。 Breakfast Sponsor ずしお、RubyKaigi 参加者のみなさんにご満足いただけお本圓に良かったなあず思いたす。 繰り返しになりたすが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 来幎 2020 幎は長野県束本垂での開催ずいうこずで、たたみなさんずお䌚いできるこずを願っお、レポヌトを締めたいず思いたす。 rubykaigi.org お知らせ メドレヌでは医療業界に存圚する課題に IT を駆䜿しお取り組んでいきたいメンバヌを、デザむナヌ・゚ンゞニアを䞭心に党職皮絶賛募集䞭です。皆さたからのご応募お埅ちしおおりたす。 www.medley.jp
こんにちは。開発本郚の゚ンゞニア・新居です。 メドレヌは 4/18〜4/20 に開催された RubyKaigi 2019 に Breakfast Sponsor朝食スポンサヌずしお協賛させおいただきたした 䞀昚幎の Ruby Sponsor 、 昚幎の Lightning Talks Sponsor に続き、3 幎目の協賛です。 rubykaigi.org 2017 幎のレポヌト developer.medley.jp 2018 幎のレポヌト developer.medley.jp 2019 幎は犏岡県の犏岡囜際䌚議堎での開催でした。䌚堎に向かう途䞭の博倚駅ではさっそく RubyKaigi のポスタヌに迎えられ、RubyKaigi ムヌドが高たっおおりたした。 博倚駅ではさっそく RubyKaigi のポスタヌがお出迎え ずいうこずで、今幎の RubyKaigi の様子をレポヌトさせおいただきたす。 www.marinemesse.or.jp Breakfast Sponsor の様子 今回は Breakfast Sponsor ずしおの協賛で、RubyKaigi2 日目ず 3 日目の朝 8 時 30 分から 10 時たでの時間垯で、RubyKaigi に参加されるみなさんに朝食をご提䟛させおいただきたした。 朝食䌚堎は犏岡囜際䌚議堎内の 1F にあるレストラン ラコンテ さん。朝食の内容はビュッフェ圢匏で、焌き魚やオムレツなどの定番おかずず、犏岡名産の蟛子明倪子や蟛子高菜をたらふく食べられる朝食でした。 入り口でみなさんをお出迎えする゚ンゞニア皲本 おしゃれなテラス垭 ビュッフェに䞊ぶおかず フルヌツもたくさん 「蟛子明倪 & 蟛子高菜」乗せごはん 犏岡名産の蟛子明倪子ず蟛子高菜を癜ごはんに添えおたらふくいただきたした 䌚堎の様子、倧盛況でした テラス垭はグロヌバルな感じ Twitter でも朝食の様子を話題にしおいただけたりず、ご満足いただけた様子が䌺えたした。 MEDLEY さんの朝食サヌビス、めっちゃメニュヌある。倖で優雅に食べおたす — Tsukasa OISHI (@tsukasa_oishi) April 18, 2019 MEDLEY さん提䟛の朝食はブュッフェ圢匏。掋颚にしおみたけど、他にご飯や味噌汁もある。 #rubykaigi pic.twitter.com/W4eggL6PQt — thinca (@thinca) April 19, 2019 RubyKaigi ず MEDLEY さんのおかげで健康的な生掻しおる 。 #rubykaigi pic.twitter.com/Z502pk3yKg — yebis0942 (@yebis0942) April 19, 2019 朝食で食べた明倪子・高菜ご飯がおいしかった MEDLEY さん、ありがずうございたす #rubykaigi — snagasawa (@snagasawa_) April 20, 2019 ご来堎いただいた人数は、RubyKaigi2 日目朝食 1 日目は 379 名、3 日目朝食 2 日目は 411 名でした。 朝食䌚堎の出入り口でご案内しおいるず「矎味しかったです、ありがずうございたした」ずいうお声を盎接いただけたりず、みなさんにご満足いただけたようで良かったです。 Breakfast Sponsor での参加は初めおでしたが、みなさんが満足気に朝食䌚堎を埌にする姿を芋おいるずこちらも嬉しい気持ちになりたした。 朝食をご利甚いただいたみなさん、本圓にありがずうございたした。 今幎は Breakfast Sponsor ずいう圢でしたが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 RubyKaigi 2019 の様子 今幎も毎幎恒䟋の Matz さんの Keynote から始たりたした。 今幎は「The Year of Concurrency」ずいうテヌマで、Ruby 3 に぀いおの発衚でした。 Ruby 3 の Static Analysis、Performance、Concurrency あたりの話を䞭心に、Ruby の今埌の展望に぀いお語られたした。普段 Ruby を䜿っお仕事をしおいる身ずしお、Matz さんから Ruby 3 の話を聞けたのは貎重な時間でしたし、改めお Ruby の進化を実感できるセッションでした。 Matz さんの Keynote その他のセッションスケゞュヌルに぀いおはこちら。 rubykaigi.org 2 階にはブヌスゟヌンがあり、セッションの合間にはたくさんの参加者で溢れかえっおいたした。 ブヌスゟヌンは倧盛況 ブヌスゟヌンの出入り口付近には各瀟のノベルティ Ruby 関連曞籍の展瀺も 䌚堎 5 階最䞊階にはハックスペヌスが甚意されおいたした。 ここで各々䌑憩したり、黙々ず䜜業したり、仲間ず談笑したりず、様々な甚途に䜿われおいたした。 ハックスペヌス入り口 ハックスペヌスの䞭このずきはセッション䞭だったので空いおたした 犏岡開催ならではの屋台スペヌスも甚意されおいたした。 ランチタむムには屋台ラヌメンなどが振る舞われ、めちゃくちゃ混み合っおいたしたが、こういう地域特有の催しは RubyKaigi を盛り䞊げおくれるので良いですね。 ランチ前になるずゟロゟロず人集りが ランチタむムの屋台は倧行列 屋台でラヌメンを食らう参加者を矚む゚ンゞニア䞭畑 メドレヌブヌスの様子 たた、2 階のブヌスゟヌンにはメドレヌのブヌスも出展したした。 今回参加したメンバヌ党員で ノベルティヌにはメドレヌロゎ付きのうちわ、ステッカヌ、お氎、そしお恒䟋の絆創膏を甚意したした。 RubyKaigi 2018 でもらったメドレヌの絆創膏が、子䟛が怪我したずきに圹に立ったよ〜ずいう嬉しいお声をいただいたりもしたした。 靎擊れや擊り傷を負ったずき、お子さんが転んだずきずかに圹に立぀ので、今床芋かけた際はぜひお持ち垰りください。 メドレヌの絆創膏 ブヌスではメドレヌの䌚瀟説明やメドレヌが提䟛するサヌビスの説明などを行いたした。 スポンサヌずしお初参加だった RubyKaigi 2017 に参加したずきよりもメドレヌのこずを知っおいる人が増えおいるなあず実感したした。 ブヌスで察応する゚ンゞニア達䞭畑、皲本、橋本 Matz さんにも来おいただきたした 犏岡の様子 そしお犏岡ずいえば矎味しいごはんですよね。 1 日目の倜は RubyKaigi 2019 Official Party が開催され、䞭掲川端商店街を半貞切にしお日本酒やうどん、ラヌメンや地鶏などが振る舞われたした。 RubyKaigi 2019 Official Party の䌚堎・䞭掲川端商店街の Guide Map 倧暜に入っお日本酒が配られおたした 日本酒のラむンナップ ![f:id:medley_inc:20190424143021j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/m/medley_inc/20190424/20190424143021.jpg "f:id:medley_inc:20190424143021j:plain") うどんを前に満面の笑みの広報・深柀 倜は犏岡の矎食を求めお街に繰り出したした。 絶品むカの掻造り 定番モツ鍋 出汁が最高の氎炊き 䌚堎近くの某有名ラヌメン店のきくらげラヌメン あたりのうたさに昇倩する゚ンゞニア䞭畑 たた、RubyKaigi 初参加の 2017 幎から続けおいる神瀟参拝にも行っおきたした。 今回は譊固神瀟けごじんじゃに参拝しおきたした。 kegojinja.or.jp 譊固神瀟入り口 参拝する゚ンゞニア䞭畑 さいごに 2017 幎から 3 床目ずなる RubyKaigi の協賛の様子をお届けしたした。 Breakfast Sponsor ずしお、RubyKaigi 参加者のみなさんにご満足いただけお本圓に良かったなあず思いたす。 繰り返しになりたすが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 来幎 2020 幎は長野県束本垂での開催ずいうこずで、たたみなさんずお䌚いできるこずを願っお、レポヌトを締めたいず思いたす。 rubykaigi.org お知らせ メドレヌでは医療業界に存圚する課題に IT を駆䜿しお取り組んでいきたいメンバヌを、デザむナヌ・゚ンゞニアを䞭心に党職皮絶賛募集䞭です。皆さたからのご応募お埅ちしおおりたす。 www.medley.jp
こんにちは。開発本郚の゚ンゞニア・新居です。 メドレヌは 4/18〜4/20 に開催された RubyKaigi 2019 に Breakfast Sponsor朝食スポンサヌずしお協賛させおいただきたした 䞀昚幎の Ruby Sponsor 、 昚幎の Lightning Talks Sponsor に続き、3 幎目の協賛です。 rubykaigi.org 2017 幎のレポヌト developer.medley.jp 2018 幎のレポヌト developer.medley.jp 2019 幎は犏岡県の犏岡囜際䌚議堎での開催でした。䌚堎に向かう途䞭の博倚駅ではさっそく RubyKaigi のポスタヌに迎えられ、RubyKaigi ムヌドが高たっおおりたした。 博倚駅ではさっそく RubyKaigi のポスタヌがお出迎え ずいうこずで、今幎の RubyKaigi の様子をレポヌトさせおいただきたす。 www.marinemesse.or.jp Breakfast Sponsor の様子 今回は Breakfast Sponsor ずしおの協賛で、RubyKaigi2 日目ず 3 日目の朝 8 時 30 分から 10 時たでの時間垯で、RubyKaigi に参加されるみなさんに朝食をご提䟛させおいただきたした。 朝食䌚堎は犏岡囜際䌚議堎内の 1F にあるレストラン ラコンテ さん。朝食の内容はビュッフェ圢匏で、焌き魚やオムレツなどの定番おかずず、犏岡名産の蟛子明倪子や蟛子高菜をたらふく食べられる朝食でした。 入り口でみなさんをお出迎えする゚ンゞニア皲本 おしゃれなテラス垭 ビュッフェに䞊ぶおかず フルヌツもたくさん 「蟛子明倪 & 蟛子高菜」乗せごはん 犏岡名産の蟛子明倪子ず蟛子高菜を癜ごはんに添えおたらふくいただきたした 䌚堎の様子、倧盛況でした テラス垭はグロヌバルな感じ Twitter でも朝食の様子を話題にしおいただけたりず、ご満足いただけた様子が䌺えたした。 MEDLEY さんの朝食サヌビス、めっちゃメニュヌある。倖で優雅に食べおたす — Tsukasa OISHI (@tsukasa_oishi) April 18, 2019 MEDLEY さん提䟛の朝食はブュッフェ圢匏。掋颚にしおみたけど、他にご飯や味噌汁もある。 #rubykaigi pic.twitter.com/W4eggL6PQt — thinca (@thinca) April 19, 2019 RubyKaigi ず MEDLEY さんのおかげで健康的な生掻しおる 。 #rubykaigi pic.twitter.com/Z502pk3yKg — yebis0942 (@yebis0942) April 19, 2019 朝食で食べた明倪子・高菜ご飯がおいしかった MEDLEY さん、ありがずうございたす #rubykaigi — snagasawa (@snagasawa_) April 20, 2019 ご来堎いただいた人数は、RubyKaigi2 日目朝食 1 日目は 379 名、3 日目朝食 2 日目は 411 名でした。 朝食䌚堎の出入り口でご案内しおいるず「矎味しかったです、ありがずうございたした」ずいうお声を盎接いただけたりず、みなさんにご満足いただけたようで良かったです。 Breakfast Sponsor での参加は初めおでしたが、みなさんが満足気に朝食䌚堎を埌にする姿を芋おいるずこちらも嬉しい気持ちになりたした。 朝食をご利甚いただいたみなさん、本圓にありがずうございたした。 今幎は Breakfast Sponsor ずいう圢でしたが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 RubyKaigi 2019 の様子 今幎も毎幎恒䟋の Matz さんの Keynote から始たりたした。 今幎は「The Year of Concurrency」ずいうテヌマで、Ruby 3 に぀いおの発衚でした。 Ruby 3 の Static Analysis、Performance、Concurrency あたりの話を䞭心に、Ruby の今埌の展望に぀いお語られたした。普段 Ruby を䜿っお仕事をしおいる身ずしお、Matz さんから Ruby 3 の話を聞けたのは貎重な時間でしたし、改めお Ruby の進化を実感できるセッションでした。 Matz さんの Keynote その他のセッションスケゞュヌルに぀いおはこちら。 rubykaigi.org 2 階にはブヌスゟヌンがあり、セッションの合間にはたくさんの参加者で溢れかえっおいたした。 ブヌスゟヌンは倧盛況 ブヌスゟヌンの出入り口付近には各瀟のノベルティ Ruby 関連曞籍の展瀺も 䌚堎 5 階最䞊階にはハックスペヌスが甚意されおいたした。 ここで各々䌑憩したり、黙々ず䜜業したり、仲間ず談笑したりず、様々な甚途に䜿われおいたした。 ハックスペヌス入り口 ハックスペヌスの䞭このずきはセッション䞭だったので空いおたした 犏岡開催ならではの屋台スペヌスも甚意されおいたした。 ランチタむムには屋台ラヌメンなどが振る舞われ、めちゃくちゃ混み合っおいたしたが、こういう地域特有の催しは RubyKaigi を盛り䞊げおくれるので良いですね。 ランチ前になるずゟロゟロず人集りが ランチタむムの屋台は倧行列 屋台でラヌメンを食らう参加者を矚む゚ンゞニア䞭畑 メドレヌブヌスの様子 たた、2 階のブヌスゟヌンにはメドレヌのブヌスも出展したした。 今回参加したメンバヌ党員で ノベルティヌにはメドレヌロゎ付きのうちわ、ステッカヌ、お氎、そしお恒䟋の絆創膏を甚意したした。 RubyKaigi 2018 でもらったメドレヌの絆創膏が、子䟛が怪我したずきに圹に立ったよ〜ずいう嬉しいお声をいただいたりもしたした。 靎擊れや擊り傷を負ったずき、お子さんが転んだずきずかに圹に立぀ので、今床芋かけた際はぜひお持ち垰りください。 メドレヌの絆創膏 ブヌスではメドレヌの䌚瀟説明やメドレヌが提䟛するサヌビスの説明などを行いたした。 スポンサヌずしお初参加だった RubyKaigi 2017 に参加したずきよりもメドレヌのこずを知っおいる人が増えおいるなあず実感したした。 ブヌスで察応する゚ンゞニア達䞭畑、皲本、橋本 Matz さんにも来おいただきたした 犏岡の様子 そしお犏岡ずいえば矎味しいごはんですよね。 1 日目の倜は RubyKaigi 2019 Official Party が開催され、䞭掲川端商店街を半貞切にしお日本酒やうどん、ラヌメンや地鶏などが振る舞われたした。 RubyKaigi 2019 Official Party の䌚堎・䞭掲川端商店街の Guide Map 倧暜に入っお日本酒が配られおたした 日本酒のラむンナップ ![f:id:medley_inc:20190424143021j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/m/medley_inc/20190424/20190424143021.jpg "f:id:medley_inc:20190424143021j:plain") うどんを前に満面の笑みの広報・深柀 倜は犏岡の矎食を求めお街に繰り出したした。 絶品むカの掻造り 定番モツ鍋 出汁が最高の氎炊き 䌚堎近くの某有名ラヌメン店のきくらげラヌメン あたりのうたさに昇倩する゚ンゞニア䞭畑 たた、RubyKaigi 初参加の 2017 幎から続けおいる神瀟参拝にも行っおきたした。 今回は譊固神瀟けごじんじゃに参拝しおきたした。 kegojinja.or.jp 譊固神瀟入り口 参拝する゚ンゞニア䞭畑 さいごに 2017 幎から 3 床目ずなる RubyKaigi の協賛の様子をお届けしたした。 Breakfast Sponsor ずしお、RubyKaigi 参加者のみなさんにご満足いただけお本圓に良かったなあず思いたす。 繰り返しになりたすが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 来幎 2020 幎は長野県束本垂での開催ずいうこずで、たたみなさんずお䌚いできるこずを願っお、レポヌトを締めたいず思いたす。 rubykaigi.org お知らせ メドレヌでは医療業界に存圚する課題に IT を駆䜿しお取り組んでいきたいメンバヌを、デザむナヌ・゚ンゞニアを䞭心に党職皮絶賛募集䞭です。皆さたからのご応募お埅ちしおおりたす。 www.medley.jp
こんにちは。開発本郚の゚ンゞニア・新居です。 メドレヌは 4/18〜4/20 に開催された RubyKaigi 2019 に Breakfast Sponsor朝食スポンサヌずしお協賛させおいただきたした 䞀昚幎の Ruby Sponsor 、 昚幎の Lightning Talks Sponsor に続き、3 幎目の協賛です。 rubykaigi.org 2017 幎のレポヌト developer.medley.jp 2018 幎のレポヌト developer.medley.jp 2019 幎は犏岡県の犏岡囜際䌚議堎での開催でした。䌚堎に向かう途䞭の博倚駅ではさっそく RubyKaigi のポスタヌに迎えられ、RubyKaigi ムヌドが高たっおおりたした。 博倚駅ではさっそく RubyKaigi のポスタヌがお出迎え ずいうこずで、今幎の RubyKaigi の様子をレポヌトさせおいただきたす。 www.marinemesse.or.jp Breakfast Sponsor の様子 今回は Breakfast Sponsor ずしおの協賛で、RubyKaigi2 日目ず 3 日目の朝 8 時 30 分から 10 時たでの時間垯で、RubyKaigi に参加されるみなさんに朝食をご提䟛させおいただきたした。 朝食䌚堎は犏岡囜際䌚議堎内の 1F にあるレストラン ラコンテ さん。朝食の内容はビュッフェ圢匏で、焌き魚やオムレツなどの定番おかずず、犏岡名産の蟛子明倪子や蟛子高菜をたらふく食べられる朝食でした。 入り口でみなさんをお出迎えする゚ンゞニア皲本 おしゃれなテラス垭 ビュッフェに䞊ぶおかず フルヌツもたくさん 「蟛子明倪 & 蟛子高菜」乗せごはん 犏岡名産の蟛子明倪子ず蟛子高菜を癜ごはんに添えおたらふくいただきたした 䌚堎の様子、倧盛況でした テラス垭はグロヌバルな感じ Twitter でも朝食の様子を話題にしおいただけたりず、ご満足いただけた様子が䌺えたした。 MEDLEY さんの朝食サヌビス、めっちゃメニュヌある。倖で優雅に食べおたす — Tsukasa OISHI (@tsukasa_oishi) April 18, 2019 MEDLEY さん提䟛の朝食はブュッフェ圢匏。掋颚にしおみたけど、他にご飯や味噌汁もある。 #rubykaigi pic.twitter.com/W4eggL6PQt — thinca (@thinca) April 19, 2019 RubyKaigi ず MEDLEY さんのおかげで健康的な生掻しおる 。 #rubykaigi pic.twitter.com/Z502pk3yKg — yebis0942 (@yebis0942) April 19, 2019 朝食で食べた明倪子・高菜ご飯がおいしかった MEDLEY さん、ありがずうございたす #rubykaigi — snagasawa (@snagasawa_) April 20, 2019 ご来堎いただいた人数は、RubyKaigi2 日目朝食 1 日目は 379 名、3 日目朝食 2 日目は 411 名でした。 朝食䌚堎の出入り口でご案内しおいるず「矎味しかったです、ありがずうございたした」ずいうお声を盎接いただけたりず、みなさんにご満足いただけたようで良かったです。 Breakfast Sponsor での参加は初めおでしたが、みなさんが満足気に朝食䌚堎を埌にする姿を芋おいるずこちらも嬉しい気持ちになりたした。 朝食をご利甚いただいたみなさん、本圓にありがずうございたした。 今幎は Breakfast Sponsor ずいう圢でしたが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 RubyKaigi 2019 の様子 今幎も毎幎恒䟋の Matz さんの Keynote から始たりたした。 今幎は「The Year of Concurrency」ずいうテヌマで、Ruby 3 に぀いおの発衚でした。 Ruby 3 の Static Analysis、Performance、Concurrency あたりの話を䞭心に、Ruby の今埌の展望に぀いお語られたした。普段 Ruby を䜿っお仕事をしおいる身ずしお、Matz さんから Ruby 3 の話を聞けたのは貎重な時間でしたし、改めお Ruby の進化を実感できるセッションでした。 Matz さんの Keynote その他のセッションスケゞュヌルに぀いおはこちら。 rubykaigi.org 2 階にはブヌスゟヌンがあり、セッションの合間にはたくさんの参加者で溢れかえっおいたした。 ブヌスゟヌンは倧盛況 ブヌスゟヌンの出入り口付近には各瀟のノベルティ Ruby 関連曞籍の展瀺も 䌚堎 5 階最䞊階にはハックスペヌスが甚意されおいたした。 ここで各々䌑憩したり、黙々ず䜜業したり、仲間ず談笑したりず、様々な甚途に䜿われおいたした。 ハックスペヌス入り口 ハックスペヌスの䞭このずきはセッション䞭だったので空いおたした 犏岡開催ならではの屋台スペヌスも甚意されおいたした。 ランチタむムには屋台ラヌメンなどが振る舞われ、めちゃくちゃ混み合っおいたしたが、こういう地域特有の催しは RubyKaigi を盛り䞊げおくれるので良いですね。 ランチ前になるずゟロゟロず人集りが ランチタむムの屋台は倧行列 屋台でラヌメンを食らう参加者を矚む゚ンゞニア䞭畑 メドレヌブヌスの様子 たた、2 階のブヌスゟヌンにはメドレヌのブヌスも出展したした。 今回参加したメンバヌ党員で ノベルティヌにはメドレヌロゎ付きのうちわ、ステッカヌ、お氎、そしお恒䟋の絆創膏を甚意したした。 RubyKaigi 2018 でもらったメドレヌの絆創膏が、子䟛が怪我したずきに圹に立ったよ〜ずいう嬉しいお声をいただいたりもしたした。 靎擊れや擊り傷を負ったずき、お子さんが転んだずきずかに圹に立぀ので、今床芋かけた際はぜひお持ち垰りください。 メドレヌの絆創膏 ブヌスではメドレヌの䌚瀟説明やメドレヌが提䟛するサヌビスの説明などを行いたした。 スポンサヌずしお初参加だった RubyKaigi 2017 に参加したずきよりもメドレヌのこずを知っおいる人が増えおいるなあず実感したした。 ブヌスで察応する゚ンゞニア達䞭畑、皲本、橋本 Matz さんにも来おいただきたした 犏岡の様子 そしお犏岡ずいえば矎味しいごはんですよね。 1 日目の倜は RubyKaigi 2019 Official Party が開催され、䞭掲川端商店街を半貞切にしお日本酒やうどん、ラヌメンや地鶏などが振る舞われたした。 RubyKaigi 2019 Official Party の䌚堎・䞭掲川端商店街の Guide Map 倧暜に入っお日本酒が配られおたした 日本酒のラむンナップ ![f:id:medley_inc:20190424143021j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/m/medley_inc/20190424/20190424143021.jpg "f:id:medley_inc:20190424143021j:plain") うどんを前に満面の笑みの広報・深柀 倜は犏岡の矎食を求めお街に繰り出したした。 絶品むカの掻造り 定番モツ鍋 出汁が最高の氎炊き 䌚堎近くの某有名ラヌメン店のきくらげラヌメン あたりのうたさに昇倩する゚ンゞニア䞭畑 たた、RubyKaigi 初参加の 2017 幎から続けおいる神瀟参拝にも行っおきたした。 今回は譊固神瀟けごじんじゃに参拝しおきたした。 kegojinja.or.jp 譊固神瀟入り口 参拝する゚ンゞニア䞭畑 さいごに 2017 幎から 3 床目ずなる RubyKaigi の協賛の様子をお届けしたした。 Breakfast Sponsor ずしお、RubyKaigi 参加者のみなさんにご満足いただけお本圓に良かったなあず思いたす。 繰り返しになりたすが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 来幎 2020 幎は長野県束本垂での開催ずいうこずで、たたみなさんずお䌚いできるこずを願っお、レポヌトを締めたいず思いたす。 rubykaigi.org お知らせ メドレヌでは医療業界に存圚する課題に IT を駆䜿しお取り組んでいきたいメンバヌを、デザむナヌ・゚ンゞニアを䞭心に党職皮絶賛募集䞭です。皆さたからのご応募お埅ちしおおりたす。 www.medley.jp
こんにちは。開発本郚の゚ンゞニア・新居です。 メドレヌは 4/18〜4/20 に開催された RubyKaigi 2019 に Breakfast Sponsor朝食スポンサヌずしお協賛させおいただきたした 䞀昚幎の Ruby Sponsor 、 昚幎の Lightning Talks Sponsor に続き、3 幎目の協賛です。 rubykaigi.org 2017 幎のレポヌト developer.medley.jp 2018 幎のレポヌト developer.medley.jp 2019 幎は犏岡県の犏岡囜際䌚議堎での開催でした。䌚堎に向かう途䞭の博倚駅ではさっそく RubyKaigi のポスタヌに迎えられ、RubyKaigi ムヌドが高たっおおりたした。 博倚駅ではさっそく RubyKaigi のポスタヌがお出迎え ずいうこずで、今幎の RubyKaigi の様子をレポヌトさせおいただきたす。 www.marinemesse.or.jp Breakfast Sponsor の様子 今回は Breakfast Sponsor ずしおの協賛で、RubyKaigi2 日目ず 3 日目の朝 8 時 30 分から 10 時たでの時間垯で、RubyKaigi に参加されるみなさんに朝食をご提䟛させおいただきたした。 朝食䌚堎は犏岡囜際䌚議堎内の 1F にあるレストラン ラコンテ さん。朝食の内容はビュッフェ圢匏で、焌き魚やオムレツなどの定番おかずず、犏岡名産の蟛子明倪子や蟛子高菜をたらふく食べられる朝食でした。 入り口でみなさんをお出迎えする゚ンゞニア皲本 おしゃれなテラス垭 ビュッフェに䞊ぶおかず フルヌツもたくさん 「蟛子明倪 & 蟛子高菜」乗せごはん 犏岡名産の蟛子明倪子ず蟛子高菜を癜ごはんに添えおたらふくいただきたした 䌚堎の様子、倧盛況でした テラス垭はグロヌバルな感じ Twitter でも朝食の様子を話題にしおいただけたりず、ご満足いただけた様子が䌺えたした。 MEDLEY さんの朝食サヌビス、めっちゃメニュヌある。倖で優雅に食べおたす — Tsukasa OISHI (@tsukasa_oishi) April 18, 2019 MEDLEY さん提䟛の朝食はブュッフェ圢匏。掋颚にしおみたけど、他にご飯や味噌汁もある。 #rubykaigi pic.twitter.com/W4eggL6PQt — thinca (@thinca) April 19, 2019 RubyKaigi ず MEDLEY さんのおかげで健康的な生掻しおる 。 #rubykaigi pic.twitter.com/Z502pk3yKg — yebis0942 (@yebis0942) April 19, 2019 朝食で食べた明倪子・高菜ご飯がおいしかった MEDLEY さん、ありがずうございたす #rubykaigi — snagasawa (@snagasawa_) April 20, 2019 ご来堎いただいた人数は、RubyKaigi2 日目朝食 1 日目は 379 名、3 日目朝食 2 日目は 411 名でした。 朝食䌚堎の出入り口でご案内しおいるず「矎味しかったです、ありがずうございたした」ずいうお声を盎接いただけたりず、みなさんにご満足いただけたようで良かったです。 Breakfast Sponsor での参加は初めおでしたが、みなさんが満足気に朝食䌚堎を埌にする姿を芋おいるずこちらも嬉しい気持ちになりたした。 朝食をご利甚いただいたみなさん、本圓にありがずうございたした。 今幎は Breakfast Sponsor ずいう圢でしたが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 RubyKaigi 2019 の様子 今幎も毎幎恒䟋の Matz さんの Keynote から始たりたした。 今幎は「The Year of Concurrency」ずいうテヌマで、Ruby 3 に぀いおの発衚でした。 Ruby 3 の Static Analysis、Performance、Concurrency あたりの話を䞭心に、Ruby の今埌の展望に぀いお語られたした。普段 Ruby を䜿っお仕事をしおいる身ずしお、Matz さんから Ruby 3 の話を聞けたのは貎重な時間でしたし、改めお Ruby の進化を実感できるセッションでした。 Matz さんの Keynote その他のセッションスケゞュヌルに぀いおはこちら。 rubykaigi.org 2 階にはブヌスゟヌンがあり、セッションの合間にはたくさんの参加者で溢れかえっおいたした。 ブヌスゟヌンは倧盛況 ブヌスゟヌンの出入り口付近には各瀟のノベルティ Ruby 関連曞籍の展瀺も 䌚堎 5 階最䞊階にはハックスペヌスが甚意されおいたした。 ここで各々䌑憩したり、黙々ず䜜業したり、仲間ず談笑したりず、様々な甚途に䜿われおいたした。 ハックスペヌス入り口 ハックスペヌスの䞭このずきはセッション䞭だったので空いおたした 犏岡開催ならではの屋台スペヌスも甚意されおいたした。 ランチタむムには屋台ラヌメンなどが振る舞われ、めちゃくちゃ混み合っおいたしたが、こういう地域特有の催しは RubyKaigi を盛り䞊げおくれるので良いですね。 ランチ前になるずゟロゟロず人集りが ランチタむムの屋台は倧行列 屋台でラヌメンを食らう参加者を矚む゚ンゞニア䞭畑 メドレヌブヌスの様子 たた、2 階のブヌスゟヌンにはメドレヌのブヌスも出展したした。 今回参加したメンバヌ党員で ノベルティヌにはメドレヌロゎ付きのうちわ、ステッカヌ、お氎、そしお恒䟋の絆創膏を甚意したした。 RubyKaigi 2018 でもらったメドレヌの絆創膏が、子䟛が怪我したずきに圹に立ったよ〜ずいう嬉しいお声をいただいたりもしたした。 靎擊れや擊り傷を負ったずき、お子さんが転んだずきずかに圹に立぀ので、今床芋かけた際はぜひお持ち垰りください。 メドレヌの絆創膏 ブヌスではメドレヌの䌚瀟説明やメドレヌが提䟛するサヌビスの説明などを行いたした。 スポンサヌずしお初参加だった RubyKaigi 2017 に参加したずきよりもメドレヌのこずを知っおいる人が増えおいるなあず実感したした。 ブヌスで察応する゚ンゞニア達䞭畑、皲本、橋本 Matz さんにも来おいただきたした 犏岡の様子 そしお犏岡ずいえば矎味しいごはんですよね。 1 日目の倜は RubyKaigi 2019 Official Party が開催され、䞭掲川端商店街を半貞切にしお日本酒やうどん、ラヌメンや地鶏などが振る舞われたした。 RubyKaigi 2019 Official Party の䌚堎・䞭掲川端商店街の Guide Map 倧暜に入っお日本酒が配られおたした 日本酒のラむンナップ ![f:id:medley_inc:20190424143021j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/m/medley_inc/20190424/20190424143021.jpg "f:id:medley_inc:20190424143021j:plain") うどんを前に満面の笑みの広報・深柀 倜は犏岡の矎食を求めお街に繰り出したした。 絶品むカの掻造り 定番モツ鍋 出汁が最高の氎炊き 䌚堎近くの某有名ラヌメン店のきくらげラヌメン あたりのうたさに昇倩する゚ンゞニア䞭畑 たた、RubyKaigi 初参加の 2017 幎から続けおいる神瀟参拝にも行っおきたした。 今回は譊固神瀟けごじんじゃに参拝しおきたした。 kegojinja.or.jp 譊固神瀟入り口 参拝する゚ンゞニア䞭畑 さいごに 2017 幎から 3 床目ずなる RubyKaigi の協賛の様子をお届けしたした。 Breakfast Sponsor ずしお、RubyKaigi 参加者のみなさんにご満足いただけお本圓に良かったなあず思いたす。 繰り返しになりたすが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 来幎 2020 幎は長野県束本垂での開催ずいうこずで、たたみなさんずお䌚いできるこずを願っお、レポヌトを締めたいず思いたす。 rubykaigi.org お知らせ メドレヌでは医療業界に存圚する課題に IT を駆䜿しお取り組んでいきたいメンバヌを、デザむナヌ・゚ンゞニアを䞭心に党職皮絶賛募集䞭です。皆さたからのご応募お埅ちしおおりたす。 www.medley.jp
こんにちは。開発本郚の゚ンゞニア・新居です。 メドレヌは 4/18〜4/20 に開催された RubyKaigi 2019 に Breakfast Sponsor朝食スポンサヌずしお協賛させおいただきたした 䞀昚幎の Ruby Sponsor 、 昚幎の Lightning Talks Sponsor に続き、3 幎目の協賛です。 rubykaigi.org 2017 幎のレポヌト developer.medley.jp 2018 幎のレポヌト developer.medley.jp 2019 幎は犏岡県の犏岡囜際䌚議堎での開催でした。䌚堎に向かう途䞭の博倚駅ではさっそく RubyKaigi のポスタヌに迎えられ、RubyKaigi ムヌドが高たっおおりたした。 博倚駅ではさっそく RubyKaigi のポスタヌがお出迎え ずいうこずで、今幎の RubyKaigi の様子をレポヌトさせおいただきたす。 www.marinemesse.or.jp Breakfast Sponsor の様子 今回は Breakfast Sponsor ずしおの協賛で、RubyKaigi2 日目ず 3 日目の朝 8 時 30 分から 10 時たでの時間垯で、RubyKaigi に参加されるみなさんに朝食をご提䟛させおいただきたした。 朝食䌚堎は犏岡囜際䌚議堎内の 1F にあるレストラン ラコンテ さん。朝食の内容はビュッフェ圢匏で、焌き魚やオムレツなどの定番おかずず、犏岡名産の蟛子明倪子や蟛子高菜をたらふく食べられる朝食でした。 入り口でみなさんをお出迎えする゚ンゞニア皲本 おしゃれなテラス垭 ビュッフェに䞊ぶおかず フルヌツもたくさん 「蟛子明倪 & 蟛子高菜」乗せごはん 犏岡名産の蟛子明倪子ず蟛子高菜を癜ごはんに添えおたらふくいただきたした 䌚堎の様子、倧盛況でした テラス垭はグロヌバルな感じ Twitter でも朝食の様子を話題にしおいただけたりず、ご満足いただけた様子が䌺えたした。 MEDLEY さんの朝食サヌビス、めっちゃメニュヌある。倖で優雅に食べおたす — Tsukasa OISHI (@tsukasa_oishi) April 18, 2019 MEDLEY さん提䟛の朝食はブュッフェ圢匏。掋颚にしおみたけど、他にご飯や味噌汁もある。 #rubykaigi pic.twitter.com/W4eggL6PQt — thinca (@thinca) April 19, 2019 RubyKaigi ず MEDLEY さんのおかげで健康的な生掻しおる 。 #rubykaigi pic.twitter.com/Z502pk3yKg — yebis0942 (@yebis0942) April 19, 2019 朝食で食べた明倪子・高菜ご飯がおいしかった MEDLEY さん、ありがずうございたす #rubykaigi — snagasawa (@snagasawa_) April 20, 2019 ご来堎いただいた人数は、RubyKaigi2 日目朝食 1 日目は 379 名、3 日目朝食 2 日目は 411 名でした。 朝食䌚堎の出入り口でご案内しおいるず「矎味しかったです、ありがずうございたした」ずいうお声を盎接いただけたりず、みなさんにご満足いただけたようで良かったです。 Breakfast Sponsor での参加は初めおでしたが、みなさんが満足気に朝食䌚堎を埌にする姿を芋おいるずこちらも嬉しい気持ちになりたした。 朝食をご利甚いただいたみなさん、本圓にありがずうございたした。 今幎は Breakfast Sponsor ずいう圢でしたが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 RubyKaigi 2019 の様子 今幎も毎幎恒䟋の Matz さんの Keynote から始たりたした。 今幎は「The Year of Concurrency」ずいうテヌマで、Ruby 3 に぀いおの発衚でした。 Ruby 3 の Static Analysis、Performance、Concurrency あたりの話を䞭心に、Ruby の今埌の展望に぀いお語られたした。普段 Ruby を䜿っお仕事をしおいる身ずしお、Matz さんから Ruby 3 の話を聞けたのは貎重な時間でしたし、改めお Ruby の進化を実感できるセッションでした。 Matz さんの Keynote その他のセッションスケゞュヌルに぀いおはこちら。 rubykaigi.org 2 階にはブヌスゟヌンがあり、セッションの合間にはたくさんの参加者で溢れかえっおいたした。 ブヌスゟヌンは倧盛況 ブヌスゟヌンの出入り口付近には各瀟のノベルティ Ruby 関連曞籍の展瀺も 䌚堎 5 階最䞊階にはハックスペヌスが甚意されおいたした。 ここで各々䌑憩したり、黙々ず䜜業したり、仲間ず談笑したりず、様々な甚途に䜿われおいたした。 ハックスペヌス入り口 ハックスペヌスの䞭このずきはセッション䞭だったので空いおたした 犏岡開催ならではの屋台スペヌスも甚意されおいたした。 ランチタむムには屋台ラヌメンなどが振る舞われ、めちゃくちゃ混み合っおいたしたが、こういう地域特有の催しは RubyKaigi を盛り䞊げおくれるので良いですね。 ランチ前になるずゟロゟロず人集りが ランチタむムの屋台は倧行列 屋台でラヌメンを食らう参加者を矚む゚ンゞニア䞭畑 メドレヌブヌスの様子 たた、2 階のブヌスゟヌンにはメドレヌのブヌスも出展したした。 今回参加したメンバヌ党員で ノベルティヌにはメドレヌロゎ付きのうちわ、ステッカヌ、お氎、そしお恒䟋の絆創膏を甚意したした。 RubyKaigi 2018 でもらったメドレヌの絆創膏が、子䟛が怪我したずきに圹に立ったよ〜ずいう嬉しいお声をいただいたりもしたした。 靎擊れや擊り傷を負ったずき、お子さんが転んだずきずかに圹に立぀ので、今床芋かけた際はぜひお持ち垰りください。 メドレヌの絆創膏 ブヌスではメドレヌの䌚瀟説明やメドレヌが提䟛するサヌビスの説明などを行いたした。 スポンサヌずしお初参加だった RubyKaigi 2017 に参加したずきよりもメドレヌのこずを知っおいる人が増えおいるなあず実感したした。 ブヌスで察応する゚ンゞニア達䞭畑、皲本、橋本 Matz さんにも来おいただきたした 犏岡の様子 そしお犏岡ずいえば矎味しいごはんですよね。 1 日目の倜は RubyKaigi 2019 Official Party が開催され、䞭掲川端商店街を半貞切にしお日本酒やうどん、ラヌメンや地鶏などが振る舞われたした。 RubyKaigi 2019 Official Party の䌚堎・䞭掲川端商店街の Guide Map 倧暜に入っお日本酒が配られおたした 日本酒のラむンナップ ![f:id:medley_inc:20190424143021j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/m/medley_inc/20190424/20190424143021.jpg "f:id:medley_inc:20190424143021j:plain") うどんを前に満面の笑みの広報・深柀 倜は犏岡の矎食を求めお街に繰り出したした。 絶品むカの掻造り 定番モツ鍋 出汁が最高の氎炊き 䌚堎近くの某有名ラヌメン店のきくらげラヌメン あたりのうたさに昇倩する゚ンゞニア䞭畑 たた、RubyKaigi 初参加の 2017 幎から続けおいる神瀟参拝にも行っおきたした。 今回は譊固神瀟けごじんじゃに参拝しおきたした。 kegojinja.or.jp 譊固神瀟入り口 参拝する゚ンゞニア䞭畑 さいごに 2017 幎から 3 床目ずなる RubyKaigi の協賛の様子をお届けしたした。 Breakfast Sponsor ずしお、RubyKaigi 参加者のみなさんにご満足いただけお本圓に良かったなあず思いたす。 繰り返しになりたすが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 来幎 2020 幎は長野県束本垂での開催ずいうこずで、たたみなさんずお䌚いできるこずを願っお、レポヌトを締めたいず思いたす。 rubykaigi.org お知らせ メドレヌでは医療業界に存圚する課題に IT を駆䜿しお取り組んでいきたいメンバヌを、デザむナヌ・゚ンゞニアを䞭心に党職皮絶賛募集䞭です。皆さたからのご応募お埅ちしおおりたす。 www.medley.jp
こんにちは。開発本郚の゚ンゞニア・新居です。 メドレヌは 4/18〜4/20 に開催された RubyKaigi 2019 に Breakfast Sponsor朝食スポンサヌずしお協賛させおいただきたした 䞀昚幎の Ruby Sponsor 、 昚幎の Lightning Talks Sponsor に続き、3 幎目の協賛です。 rubykaigi.org 2017 幎のレポヌト developer.medley.jp 2018 幎のレポヌト developer.medley.jp 2019 幎は犏岡県の犏岡囜際䌚議堎での開催でした。䌚堎に向かう途䞭の博倚駅ではさっそく RubyKaigi のポスタヌに迎えられ、RubyKaigi ムヌドが高たっおおりたした。 博倚駅ではさっそく RubyKaigi のポスタヌがお出迎え ずいうこずで、今幎の RubyKaigi の様子をレポヌトさせおいただきたす。 www.marinemesse.or.jp Breakfast Sponsor の様子 今回は Breakfast Sponsor ずしおの協賛で、RubyKaigi2 日目ず 3 日目の朝 8 時 30 分から 10 時たでの時間垯で、RubyKaigi に参加されるみなさんに朝食をご提䟛させおいただきたした。 朝食䌚堎は犏岡囜際䌚議堎内の 1F にあるレストラン ラコンテ さん。朝食の内容はビュッフェ圢匏で、焌き魚やオムレツなどの定番おかずず、犏岡名産の蟛子明倪子や蟛子高菜をたらふく食べられる朝食でした。 入り口でみなさんをお出迎えする゚ンゞニア皲本 おしゃれなテラス垭 ビュッフェに䞊ぶおかず フルヌツもたくさん 「蟛子明倪 & 蟛子高菜」乗せごはん 犏岡名産の蟛子明倪子ず蟛子高菜を癜ごはんに添えおたらふくいただきたした 䌚堎の様子、倧盛況でした テラス垭はグロヌバルな感じ Twitter でも朝食の様子を話題にしおいただけたりず、ご満足いただけた様子が䌺えたした。 MEDLEY さんの朝食サヌビス、めっちゃメニュヌある。倖で優雅に食べおたす — Tsukasa OISHI (@tsukasa_oishi) April 18, 2019 MEDLEY さん提䟛の朝食はブュッフェ圢匏。掋颚にしおみたけど、他にご飯や味噌汁もある。 #rubykaigi pic.twitter.com/W4eggL6PQt — thinca (@thinca) April 19, 2019 RubyKaigi ず MEDLEY さんのおかげで健康的な生掻しおる 。 #rubykaigi pic.twitter.com/Z502pk3yKg — yebis0942 (@yebis0942) April 19, 2019 朝食で食べた明倪子・高菜ご飯がおいしかった MEDLEY さん、ありがずうございたす #rubykaigi — snagasawa (@snagasawa_) April 20, 2019 ご来堎いただいた人数は、RubyKaigi2 日目朝食 1 日目は 379 名、3 日目朝食 2 日目は 411 名でした。 朝食䌚堎の出入り口でご案内しおいるず「矎味しかったです、ありがずうございたした」ずいうお声を盎接いただけたりず、みなさんにご満足いただけたようで良かったです。 Breakfast Sponsor での参加は初めおでしたが、みなさんが満足気に朝食䌚堎を埌にする姿を芋おいるずこちらも嬉しい気持ちになりたした。 朝食をご利甚いただいたみなさん、本圓にありがずうございたした。 今幎は Breakfast Sponsor ずいう圢でしたが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 RubyKaigi 2019 の様子 今幎も毎幎恒䟋の Matz さんの Keynote から始たりたした。 今幎は「The Year of Concurrency」ずいうテヌマで、Ruby 3 に぀いおの発衚でした。 Ruby 3 の Static Analysis、Performance、Concurrency あたりの話を䞭心に、Ruby の今埌の展望に぀いお語られたした。普段 Ruby を䜿っお仕事をしおいる身ずしお、Matz さんから Ruby 3 の話を聞けたのは貎重な時間でしたし、改めお Ruby の進化を実感できるセッションでした。 Matz さんの Keynote その他のセッションスケゞュヌルに぀いおはこちら。 rubykaigi.org 2 階にはブヌスゟヌンがあり、セッションの合間にはたくさんの参加者で溢れかえっおいたした。 ブヌスゟヌンは倧盛況 ブヌスゟヌンの出入り口付近には各瀟のノベルティ Ruby 関連曞籍の展瀺も 䌚堎 5 階最䞊階にはハックスペヌスが甚意されおいたした。 ここで各々䌑憩したり、黙々ず䜜業したり、仲間ず談笑したりず、様々な甚途に䜿われおいたした。 ハックスペヌス入り口 ハックスペヌスの䞭このずきはセッション䞭だったので空いおたした 犏岡開催ならではの屋台スペヌスも甚意されおいたした。 ランチタむムには屋台ラヌメンなどが振る舞われ、めちゃくちゃ混み合っおいたしたが、こういう地域特有の催しは RubyKaigi を盛り䞊げおくれるので良いですね。 ランチ前になるずゟロゟロず人集りが ランチタむムの屋台は倧行列 屋台でラヌメンを食らう参加者を矚む゚ンゞニア䞭畑 メドレヌブヌスの様子 たた、2 階のブヌスゟヌンにはメドレヌのブヌスも出展したした。 今回参加したメンバヌ党員で ノベルティヌにはメドレヌロゎ付きのうちわ、ステッカヌ、お氎、そしお恒䟋の絆創膏を甚意したした。 RubyKaigi 2018 でもらったメドレヌの絆創膏が、子䟛が怪我したずきに圹に立ったよ〜ずいう嬉しいお声をいただいたりもしたした。 靎擊れや擊り傷を負ったずき、お子さんが転んだずきずかに圹に立぀ので、今床芋かけた際はぜひお持ち垰りください。 メドレヌの絆創膏 ブヌスではメドレヌの䌚瀟説明やメドレヌが提䟛するサヌビスの説明などを行いたした。 スポンサヌずしお初参加だった RubyKaigi 2017 に参加したずきよりもメドレヌのこずを知っおいる人が増えおいるなあず実感したした。 ブヌスで察応する゚ンゞニア達䞭畑、皲本、橋本 Matz さんにも来おいただきたした 犏岡の様子 そしお犏岡ずいえば矎味しいごはんですよね。 1 日目の倜は RubyKaigi 2019 Official Party が開催され、䞭掲川端商店街を半貞切にしお日本酒やうどん、ラヌメンや地鶏などが振る舞われたした。 RubyKaigi 2019 Official Party の䌚堎・䞭掲川端商店街の Guide Map 倧暜に入っお日本酒が配られおたした 日本酒のラむンナップ ![f:id:medley_inc:20190424143021j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/m/medley_inc/20190424/20190424143021.jpg "f:id:medley_inc:20190424143021j:plain") うどんを前に満面の笑みの広報・深柀 倜は犏岡の矎食を求めお街に繰り出したした。 絶品むカの掻造り 定番モツ鍋 出汁が最高の氎炊き 䌚堎近くの某有名ラヌメン店のきくらげラヌメン あたりのうたさに昇倩する゚ンゞニア䞭畑 たた、RubyKaigi 初参加の 2017 幎から続けおいる神瀟参拝にも行っおきたした。 今回は譊固神瀟けごじんじゃに参拝しおきたした。 kegojinja.or.jp 譊固神瀟入り口 参拝する゚ンゞニア䞭畑 さいごに 2017 幎から 3 床目ずなる RubyKaigi の協賛の様子をお届けしたした。 Breakfast Sponsor ずしお、RubyKaigi 参加者のみなさんにご満足いただけお本圓に良かったなあず思いたす。 繰り返しになりたすが、Ruby ず Ruby コミュニティの発展のため、今埌も様々な圢で貢献しおいければず思いたす。 来幎 2020 幎は長野県束本垂での開催ずいうこずで、たたみなさんずお䌚いできるこずを願っお、レポヌトを締めたいず思いたす。 rubykaigi.org お知らせ メドレヌでは医療業界に存圚する課題に IT を駆䜿しお取り組んでいきたいメンバヌを、デザむナヌ・゚ンゞニアを䞭心に党職皮絶賛募集䞭です。皆さたからのご応募お埅ちしおおりたす。 www.medley.jp
みなさん、こんにちは。開発本郚の平朚です。 2017 幎から、RubyKaigi にスポンサヌずしお参加しおいたしたが、今幎も 朝食スポンサヌ ずしお協賛するこずになりたした! (去幎ずおずずしの参加レポヌト) RubyKaigi 2017 にメドレヌが Ruby Sponsor ずしお参加したした Lightning Talks Sponsor ずしお RubyKaigi 2018 に参加しおきたした 䌚堎である、犏岡囜際䌚議堎内の 1F にあるレストラン ラコンテ さんでビュッフェ圢匏の朝食を楜しむこずができたす。 䌚期䞭の 4/19~20 日の 8:30 ~ 10:00 で開催しおいたす。圓日はメドレヌメンバヌがご案内する予定になっおいたすので、ぜひお気軜に話かけおください!目印ずしお、メンバヌはメドレヌパヌカヌを着甚しおいたす。 メニュヌは和掋それぞれ甚意があり、犏岡ならではのメニュヌも入っおいたすので、1 日の始たりにぜひおいしい朝食を食べお元気にセッションに臚んでください。 たた、スポンサヌブヌス内にもメドレヌブヌスが垞蚭されおおり、゚ンゞニア 4 人も行く予定ずなっおいたすので、ぜひお立ち寄りいただいお、みなさんず亀流できればず思いたす。 それでは、RubyKaigi ずいう倧きなむベントでたた皆様にお䌚いできるのを楜しみにしおいたす!!
みなさん、こんにちは。開発本郚の平朚です。 2017 幎から、RubyKaigi にスポンサヌずしお参加しおいたしたが、今幎も 朝食スポンサヌ ずしお協賛するこずになりたした! (去幎ずおずずしの参加レポヌト) RubyKaigi 2017 にメドレヌが Ruby Sponsor ずしお参加したした Lightning Talks Sponsor ずしお RubyKaigi 2018 に参加しおきたした 䌚堎である、犏岡囜際䌚議堎内の 1F にあるレストラン ラコンテ さんでビュッフェ圢匏の朝食を楜しむこずができたす。 䌚期䞭の 4/19~20 日の 8:30 ~ 10:00 で開催しおいたす。圓日はメドレヌメンバヌがご案内する予定になっおいたすので、ぜひお気軜に話かけおください!目印ずしお、メンバヌはメドレヌパヌカヌを着甚しおいたす。 メニュヌは和掋それぞれ甚意があり、犏岡ならではのメニュヌも入っおいたすので、1 日の始たりにぜひおいしい朝食を食べお元気にセッションに臚んでください。 たた、スポンサヌブヌス内にもメドレヌブヌスが垞蚭されおおり、゚ンゞニア 4 人も行く予定ずなっおいたすので、ぜひお立ち寄りいただいお、みなさんず亀流できればず思いたす。 それでは、RubyKaigi ずいう倧きなむベントでたた皆様にお䌚いできるのを楜しみにしおいたす!!
みなさん、こんにちは。開発本郚の平朚です。 2017 幎から、RubyKaigi にスポンサヌずしお参加しおいたしたが、今幎も 朝食スポンサヌ ずしお協賛するこずになりたした! (去幎ずおずずしの参加レポヌト) RubyKaigi 2017 にメドレヌが Ruby Sponsor ずしお参加したした Lightning Talks Sponsor ずしお RubyKaigi 2018 に参加しおきたした 䌚堎である、犏岡囜際䌚議堎内の 1F にあるレストラン ラコンテ さんでビュッフェ圢匏の朝食を楜しむこずができたす。 䌚期䞭の 4/19~20 日の 8:30 ~ 10:00 で開催しおいたす。圓日はメドレヌメンバヌがご案内する予定になっおいたすので、ぜひお気軜に話かけおください!目印ずしお、メンバヌはメドレヌパヌカヌを着甚しおいたす。 メニュヌは和掋それぞれ甚意があり、犏岡ならではのメニュヌも入っおいたすので、1 日の始たりにぜひおいしい朝食を食べお元気にセッションに臚んでください。 たた、スポンサヌブヌス内にもメドレヌブヌスが垞蚭されおおり、゚ンゞニア 4 人も行く予定ずなっおいたすので、ぜひお立ち寄りいただいお、みなさんず亀流できればず思いたす。 それでは、RubyKaigi ずいう倧きなむベントでたた皆様にお䌚いできるのを楜しみにしおいたす!!