ē¤¾å†…ć§åˆ©ē”Ø恗悈恆ćØ恗恦悋ćØ恂悋Microsoftć®č£½å“ć€‚ć—ć‹ć—ć€ē¾å “恫ęµøé€ć›ćšć“ć®ć¾ć¾ć§ćÆęœ½ć”ć¦ć„ćć ć‘ć€‚ę®†ć©ć®ä¼ę„­ć§čØ€ćˆć‚‹äŗ‹ćŖć®ć ć‘ć‚Œć©ć€å…„ć‚Œć‚‹äŗ‹ćŒć‚“ćƒ¼ćƒ«ć«ćŖć£ć¦ć„ć¦ć€ē¾å “ć®åˆ©ē”Øč€…ć®ćƒ•ć‚©ćƒ­ćƒ¼ć‚„ē ”äæ®ć€ć¾ćŸåˆ©ē”Ø恌恗悄恙恄ļ¼ˆć¾ćŸćÆ恝恆ćŖ悋悈恆ćŖå‹•ę©Ÿć„ć‘ćØćŖ悋悂恮ļ¼‰ć‚’äø€åˆ‡ć‚„悉ćŖ恄ćØ恓恆ćŖ悋ćØ恄恆å…øåž‹ä¾‹ć§ć™ć€‚

恗恋恗态ä½æ恈ļ¼ļ¼ćØčØ€ć£ćŸć‚Šć€å¼·åˆ¶ļ¼ļ¼ćØć„ć£ćŸå¼·ęØ©ć‚’ē™ŗå‹•ć—ć¦ć‚‚ę™®åŠćÆć—ć¾ć›ć‚“ć€‚

恝恓恧态ē¾å “ć®ćƒ¬ćƒ™ćƒ«ć«åˆć‚ć›ć¦ć€ć¾ćšćÆäø€éƒØć®ę©Ÿčƒ½ć ć‘ć§é‹ē”Øå‡ŗę„ć‚‹ć‚ˆć†ć«ć€ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć‚¢ćƒ—ćƒŖ@electronć‚’ä½œć‚‹äŗ‹ć«ćŖć‚Šć¾ć—ćŸć€‚ć‚¦ć‚§ćƒ–ć‚µćƒ¼ćƒ“ć‚¹ć®ę‚Ŗ恄ē‚¹ćÆćƒ•ćƒ«ę©Ÿčƒ½ć‚’ć„ććŖ悊å…Øé¢ć«å…ØéƒØå‡ŗć—ć¦ć—ć¾ć†äŗ‹ć§ć™ć­ć€‚ć‚ć‚ŒćŖ悓ćØ恋ćŖ悉ćŖć„ć®ć ć‚ć†ć‹ļ¼ˆå¤©äø¼ćŒé£Ÿć¹ćŸć„ć®ć«ć€å¤©ć·ć‚‰ę‡ēŸ³ćƒ•ćƒ«ć‚³ćƒ¼ć‚¹ćØ恋å‡ŗć•ć‚Œć¦ć‚‚å›°ć‚‹ļ¼‰ć€‚

é›£ę˜“åŗ¦ļ¼š

今回ä½æē”Ø恙悋惗惭ć‚ø悧ć‚Æ惈ćØćƒ¢ć‚øćƒ„ćƒ¼ćƒ«

恓恮他恫态čŖčØ¼ć«åæ…要ćŖMicrosoft Azure-ADćŠć‚ˆć³Microsoft Graph API悂ä½æć„ć¾ć™ć€‚GASć®ę™‚ć«ć‚‚åˆ©ē”Øć—ć¦ć‚‹ć®ć§åˆć‚ć›ć¦å‚ē…§ć—恦ćæć¦ćć ć•ć„ć€‚

äŗ‹å‰ęŗ–å‚™

Azure恧惗惭ć‚ø悧ć‚Æćƒˆä½œęˆ

ć”ć‚‡ć£ćØå‰ć¾ć§ćÆ态Application Registration Portalć‹ć‚‰ć‚¢ćƒ—ćƒŖ恮ē™»éŒ²ćŒć§ććŸć®ć§ć™ćŒć€ē¾åœØćÆMicrosoft Azure恮äø€éƒØ恫ćŖć£ć¦ć„ć¾ć™ć€‚Microsoft365ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć§ćŖ恏ćØ悂态ē„”ę–™ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć§å§‹ć‚ć‚‰ć‚Œć‚‹ć‚ˆć†ć«ćŖć£ć¦ć„ć‚‹ć®ć§ć€Microsoftć‚¢ć‚«ć‚¦ćƒ³ćƒˆćŒē„”恄äŗŗćÆć¾ćšć‚¢ć‚«ć‚¦ćƒ³ćƒˆć‚’ä½œć£ć¦ć€ć‚µć‚¤ćƒ³ć‚¤ćƒ³ć—ć¾ć—ć‚‡ć†ć€‚

ć•ć¦ć€ć‚¢ćƒ—ćƒŖ恮ē™»éŒ²ćØćć‚Œć«ä¼“ć†ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆIDćŖć©ć®å–å¾—ę‰‹é †ćÆ仄äø‹ć®é€šć‚Šć€‚

  1. ć‚¢ćƒ—ćƒŖ恮ē™»éŒ²ć«ć¦ē™»éŒ²ć‚’é–‹å§‹ć™ć‚‹
  2. ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®ē™»éŒ²ć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋
  3. åå‰ć‚’å…„åŠ›ć€ćƒŖćƒ€ć‚¤ćƒ¬ć‚Æ惈URIćÆ怌web悒éøꊞ恗http://localhost:3000/auth/callbackć€ć‚’å…„åŠ›ļ¼ˆ127.0.0.1ćÆNGļ¼‰
  4. ē™»éŒ²ćƒœć‚æćƒ³ć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋
  5. å‡ŗć¦ććŸäø­ć§ć€ć€Œć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ļ¼ˆć‚Æ惩ćØę›øć‹ć‚Œć¦ć„ć‚‹ć®ćŒć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆID怍ćŖć®ć§ć€ć“ć®ć‚³ćƒ¼ćƒ‰ć‚’ćƒ”ćƒ¢ć—ć¦ćŠć
  6. å·¦ć‚µć‚¤ćƒ‰ćƒćƒ¼ć‚ˆć‚Šć€ć€ŒčØ¼ę˜Žę›øćØć‚·ćƒ¼ć‚Æćƒ¬ćƒƒćƒˆć€ć‚’ć‚ÆćƒŖ惃ć‚Æ
  7. 怌ꖰ恗恄ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć‚·ćƒ¼ć‚Æćƒ¬ćƒƒćƒˆć€ć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋
  8. 今回ćÆē‰¹ć«ęœ‰åŠ¹ęœŸé™ć‚’čØ­ć‘ćŖ恄恧čæ½åŠ ć‚’ć‚ÆćƒŖ惃ć‚Æ
  9. ć“ć‚Œć§å€¤ć«ć€Œć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć‚·ćƒ¼ć‚Æćƒ¬ćƒƒćƒˆć€ćŒē”Ÿęˆć•ć‚Œć¦ę‰‹ć«å…„ć‚Šć¾ć—ćŸć€‚ć“ć®ć‚·ćƒ¼ć‚Æ惬惃惈ćÆ恓恮Ꙃ恠恑恗恋č”Øē¤ŗ恕悌ćŖ恄恮恧态ę³Øę„ć—ć¦ćć ć•ć„ć€‚
  10. ć¤ć„ć‘ć¦ć€å·¦ć‚µć‚¤ćƒ‰ćƒćƒ¼ć‚ˆć‚Šć€ŒAPIć®ć‚¢ć‚Æć‚»ć‚¹čرåÆ怍悒ć‚ÆćƒŖ惃ć‚Æ恙悋
  11. Microsoft API恮äø­ć«ć‚ć‚‹ć€ŒMicrosoft Graph怍悒ć‚ÆćƒŖ惃ć‚Æ恙悋怂
  12. ć€Œå§”ä»»ć•ć‚ŒćŸć‚¢ć‚Æć‚»ć‚¹čرåÆ怍悒ć‚ÆćƒŖ惃ć‚Æ恙悋
  13. ćƒ‡ćƒ•ć‚©ćƒ«ćƒˆć§User.ReadćŒć™ć§ć«ONćŖ恮恧态offline_access态Files.ReadWrite悒ꤜē“¢ć—恦ONć«ć—ć¾ć—ć‚‡ć†ć€‚
  14. ć‚¢ć‚Æć‚»ć‚¹čرåÆ恮čæ½åŠ ć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋
  15. čæ½åŠ å‡ŗę„ćŸć‚‰ć€xxxxx恫ē®”ē†č€…ć®åŒę„ć‚’äøŽćˆć¾ć™ć‚’ć‚ÆćƒŖ惃ć‚Æć—ć¾ć™ć€‚ć™ć‚‹ćØ态ēŠ¶ę…‹ćŒē·‘č‰²ć«ćŖć‚Šć¾ć™ļ¼ˆåŒę„ć‚’äøŽćˆćšćØ悂ē®”ē†č€…ęØ©é™ć‚’č¦ć•ćŖć„å “åˆćŖ悉恰ä½æ恆恓ćØ恌åÆčƒ½ć§ć™ć€‚ć“ć®å “åˆęÆŽå›žč¦ę±‚ć•ć‚Œć¦ć‚‹ć‚¢ć‚Æć‚»ć‚¹čرåÆ恌å‡ŗć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć™ļ¼‰
  16. ę¬”ć«å·¦ć‚µć‚¤ćƒ‰ćƒćƒ¼ć‚ˆć‚Šć€ŒčŖčØ¼ć€ć‚’ć‚ÆćƒŖ惃ć‚Æ
  17. ęš—é»™ć®ä»˜äøŽć«ć¦ć€ć€Œć‚¢ć‚Æć‚»ć‚¹ćƒˆćƒ¼ć‚Æćƒ³ć€ć«ćƒć‚§ćƒƒć‚Æć‚’å…„ć‚Œć‚‹
  18. ć‚µćƒćƒ¼ćƒˆć•ć‚Œć¦ć„ć‚‹ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć®ēØ®é”žć«ę–¼ć„ć¦ćÆć€ć€Œćƒžćƒ«ćƒćƒ†ćƒŠćƒ³ćƒˆć€ć«ć—ć¦ćŠćć¾ć—ćŸļ¼ˆä¼ę„­å†…恧ä½æć†å “åˆć«ćÆćć®ēµ„ē¹”ć®ćƒ†ćƒŠćƒ³ćƒˆć§č‰Æ恄恧恗悇恆ļ¼‰
  19. äæå­˜ć‚’ć‚ÆćƒŖ惃ć‚Æ
  20. ꦂ要恮ć‚Øćƒ³ćƒ‰ćƒć‚¤ćƒ³ćƒˆć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋ćØ态恄悍恄悍ćŖć‚Øćƒ³ćƒ‰ćƒć‚¤ćƒ³ćƒˆURL恌å‡ŗ悋怂
  21. ę¦‚č¦ć®ćƒ‡ć‚£ćƒ¬ć‚Æ惈ćƒŖļ¼ˆćƒ†ćƒŠćƒ³ćƒˆć®ę•°å€¤ćÆćƒ”ćƒ¢ć£ć¦ćŠćć¾ć™ć€‚ć‚ćØć§ćƒ—ćƒ­ć‚°ćƒ©ćƒ äø­ć§ä½æē”Øć—ć¾ć™ć€‚

ā€»3.恧Web悒éø恰ćŖ恄SPA悒éøć‚“ć§ć—ć¾ć†ćØ态Proof Key for Code Exchange by OAuth Public ClientsćØć„ć£ćŸć‚Øćƒ©ćƒ¼ćŒå‡ŗć¦ć—ć¾ć„čŖčØ¼ćŒć§ćć¾ć›ć‚“ć®ć§ę³Øꄏ怂

ā€»Teamsć®ćƒ”ćƒƒć‚»ćƒ¼ć‚ø取得ćŖć©ć®å “åˆćÆ态13.恧ćÆoffline_accessć«åŠ ćˆć¦ć€Group.Read.All, Group.ReadWrite.Allć‚’åŠ ćˆć¾ć™ć€‚č¦ę±‚ć™ć‚‹scope恌ē•°ćŖć‚‹ć®ć§ä½œć‚‹ć‚¢ćƒ—ćƒŖć§ä½•ćŒåæ…要ćŖ恮恋ę³Øꄏ恌åæ…要恧恙怂Graph Explorer恧čŖæć¹ć¦čµ·ćć¾ć—ć‚‡ć†ć€‚

図ļ¼šć‚¢ćƒ—ćƒŖ恮ē™»éŒ²ć‹ć‚‰å…Ø恦ćÆå§‹ć¾ć‚Šć¾ć™ć€‚

図ļ¼šGraph悒éøꊞ恙悋

図ļ¼ščŖčØ¼ć®čØ­å®šå¤‰ę›“ć«ę³Øꄏ

electron惗惭ć‚ø悧ć‚Æ惈恮ē”Øꄏ

Web API悒꧋ēÆ‰ć™ć‚‹ę™‚ć«ć‚‚åˆ©ē”Ø恙悋express悒ä½æć†ć®ćŒćƒć‚¤ćƒ³ćƒˆć§ć™ć€‚ć—ć‹ć—ć€electron恋悉expressć‚’ę‰±ć†å “åˆć«ćÆć”ć‚‡ć£ćØå·„å¤«ćŒåæ…要恧恙怂express恌ē«‹ć”äøŠć’ć‚‹Webć‚µćƒ¼ćƒć«electronć‹ć‚‰ć‚¢ć‚Æć‚»ć‚¹ć™ć‚‹å½¢ć‚’å–ć‚‹åæ…č¦ćŒć‚ć‚‹ć®ć§ć€ä»„äø‹ć®ę‰‹é †ć§ä½œę„­ć‚’č”Œć„ć¾ć™ć€‚

ć¾ćšćÆ态express-generatorć‚’ć‚°ćƒ­ćƒ¼ćƒćƒ«ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć™ć‚‹

恄恤悂ćŖ悉恰态npm init -y恧惗惭ć‚ø悧ć‚Æćƒˆć‚’ä½œć‚‹ę‰€ć§ć™ćŒć€ä»Šå›žćÆ仄äø‹ć®ć‚³ćƒžćƒ³ćƒ‰ć§express-generator悒ä½æć£ć¦ćƒ—ćƒ­ć‚ø悧ć‚Æćƒˆć‚’ä½œęˆć—ć¾ć™ć€‚ä»Šå›žćÆazurećØć„ć†ćƒ‡ć‚£ćƒ¬ć‚Æ惈ćƒŖć‚’ä½œć£ć¦ä½œę„­ć‚’ć—ć¾ć™ć€‚

azurećØć„ć†ćƒ‡ć‚£ćƒ¬ć‚Æ惈ćƒŖćŒä½œć‚‰ć‚Œć¦ć€äø­ć«app.jsä»–ćŸćć•ć‚“ć®ä½•ć‹ćŒē”Ÿęˆć•ć‚Œć¾ć™ć€‚恓恮ꮵ階恧态仄äø‹ć®ć‚³ćƒžćƒ³ćƒ‰ć§ćƒ†ć‚¹ćƒˆć‚’恗恦ćæć¾ć™ć€‚

Windowsć®å “åˆć€FirewallćŒä½œå‹•ć—ć¦čرåÆć™ć‚‹ć‹ć©ć†ć‹ć‚’čžć„ć¦ćć‚‹ć®ć§ć€ćƒ—ćƒ©ć‚¤ćƒ™ćƒ¼ćƒˆćƒćƒƒćƒˆćƒÆćƒ¼ć‚Æć«ćƒć‚§ćƒƒć‚Æć‚’å…„ć‚Œć¦ć‚¢ć‚Æć‚»ć‚¹ć‚’čرåÆć™ć‚‹ć«ćƒć‚§ćƒƒć‚Æć‚’å…„ć‚Œć‚‹ć€‚ćć—ć¦ć€ChromećŖ恩恧http://localhost:3000/ć«ć‚¢ć‚Æć‚»ć‚¹ć—ćŸå “åˆć«ć€welcome to express恌č”Øē¤ŗć•ć‚Œć‚Œć°ęˆåŠŸć§ć™ć€‚Ctrl+C恧npm startć—ćŸć‚µćƒ¼ćƒć‚’åœę­¢ć§ćć¾ć™ć€‚

ā€»ä¼ę„­ćŖ恩恧ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆPCć§ć“ć®ć‚¢ć‚Æć‚»ć‚¹čرåÆ恌čØ±ć•ć‚Œć¦ć„ćŖć„å “åˆć«ćÆć€åˆ„é€”express恠恑恧čŖčؼē”Øć‚µćƒ¼ćƒć‚’ē«‹ć¦ć¦ć€electronć‹ć‚‰ćć®ć‚µćƒ¼ćƒćøć‚¢ć‚Æć‚»ć‚¹ć™ć‚‹ę–¹å¼ć«ć—ć¦ćŠć‘ć°ć€ć‚ÆćƒŖć‚¢ć§ćć¾ć™ć€‚

図ļ¼šexpressć«ć‚ˆć‚‹Webć‚µćƒ¼ćƒćŒē«‹ć”äøŠćŒć‚‹éš›ć®ē”»é¢

ē¶šć‘恦态app.jsć®å…„ć£ć¦ć‚‹ćƒ•ć‚©ćƒ«ćƒ€ć«ē©ŗ恮index.jsć‚’ä½œęˆć—ć€ä»„äø‹ć®ć‚³ćƒžćƒ³ćƒ‰ć§ä»–ć®ćƒ¢ć‚øćƒ„ćƒ¼ćƒ«ć‚’ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć—ć¦ćŠćć¾ć™ć€‚

ē”Ÿęˆć•ć‚Œć¦ć„ć‚‹package.json悒開恄恦态“main”: “index.js”,悒čæ½čØ˜ć—ć¦äæå­˜ć—ć¾ć™ć€‚ä»„äø‹ć®ć‚ˆć†ćŖę„Ÿć˜ć«ćŖ悋ćÆ恚恧恙怂

index.js恫ćØć‚Šć‚ćˆćšä»„äø‹ć®ćƒ†ć‚¹ćƒˆē”Øć‚³ćƒ¼ćƒ‰ć‚’čæ½čØ˜ć—ć¦ćæ悋怂npm start恧expressć®ć‚µćƒ¼ćƒć‚’čµ·å‹•ć—ćŸēŠ¶ę…‹ć§ć€electron .ć§čµ·å‹•ć—ć¦ćæ恦态welcome to express恌č”Øē¤ŗć•ć‚Œć‚Œć°ćƒ†ć‚¹ćƒˆćÆOK怂

ć—ć‹ć—ć€ć“ć®ć¾ć¾ć§ćÆ刄途npm start恧express悒ē«‹ć”äøŠć’恦ē½®ć„恦恋悉态electron .ć§čµ·å‹•ć™ć‚‹åæ…č¦ćŒć‚ć‚‹ćŸć‚ć€package.json恮scriptsć®ćƒ©ć‚¤ćƒ³ć«npm-run-all悒ä½æć£ć¦č¤‡ę•°ć®ć‚æć‚¹ć‚Æć‚’åŒę™‚ć«čµ·å‹•ć™ć‚‹ć‚ˆć†ć«ē“°å·„ć‚’ć—ć¾ć™ć€‚ć“ć‚Œć§ć€ćƒ†ć‚¹ćƒˆę™‚ćÆ态electron .恠恑恧å…Øć¦čµ·å‹•ć—ć¾ć™ć€‚

図ļ¼šexpressć‚µćƒ¼ćƒć‚’electron恋悉開恑恟

ćƒ­ć‚°ć‚¤ćƒ³ē”»é¢ćØćƒˆćƒ¼ć‚Æćƒ³ć®å–å¾—

恓恓恋悉恌äø€ē•Ŗć®å³ é“ć§ć™ć€‚é€šåøø恧恂悌恰index.jsć«č‰²ć€…ćØčؘčæ°ć™ć‚‹ę‰€ć§ć™ćŒć€ä»Šå›žć®čŖčØ¼ć‚¢ćƒ—ćƒŖć®å “åˆć«ćÆ态app.jsć®ę–¹ć«čؘčæ°ć™ć‚‹äŗ‹ć«ćŖć‚Šć¾ć™ć€‚č‡Ŗ動ē”Ÿęˆć•ć‚ŒćŸapp.js恫ćÆć™ć§ć«č‰²ć€…čؘčæ°ć•ć‚Œć¦ć„ć‚‹ć®ć§ć€ć“ć‚Œć‚’ę”¹é€ ć—ć¦ä½æć„ć¾ć™ć€‚

今回ćÆć€ć“ć”ć‚‰ć®ć‚½ćƒ¼ć‚¹ć‚³ćƒ¼ćƒ‰ć‚’åˆ©ē”Øć—ć¦ć„ć¾ć™ļ¼ˆå°‘ć—ę”¹å¤‰ć‚’åŠ ćˆć¦ć„ć¾ć™ļ¼‰

ć‚½ćƒ¼ć‚¹ć‚³ćƒ¼ćƒ‰

app.jså“ć‚³ćƒ¼ćƒ‰

  • ćƒ†ćƒŠćƒ³ćƒˆć®IDć«ć¤ć„ć¦ć§ć™ćŒć€common恫恗恦恂悋ćØ态čŖčØ¼ćŒć§ćć¾ć›ć‚“ć€‚
  • ćƒ†ćƒŠćƒ³ćƒˆć®IDć§ć™ćŒć€å†’é ­ć§å–å¾—ć—ćŸćƒ‡ć‚£ćƒ¬ć‚Æ惈ćƒŖļ¼ˆćƒ†ćƒŠćƒ³ćƒˆć®ę•°å€¤ć«ē½®ćę›ćˆć¦ćć ć•ć„ć€‚ć“ć‚ŒćŒćƒ†ćƒŠćƒ³ćƒˆID恫ćŖć‚Šć¾ć™ć€‚
  • ć‚µć‚¤ćƒ³ć‚¤ćƒ³ę™‚ć€ć‚³ćƒ¼ćƒ«ćƒćƒƒć‚Æę™‚ć€ć‚µć‚¤ćƒ³ć‚¢ć‚¦ćƒˆę™‚ć®3ć¤ć®ć‚¢ć‚Æć‚·ćƒ§ćƒ³ć«åÆ¾ć—ć¦ćć‚Œćžć‚Œå‡¦ē†ć‚’čؘčæ°ć—ć¦ć„ć¾ć™ć€‚
  • ć‚Øćƒ©ćƒ¼ćƒćƒ³ćƒ‰ćƒŖćƒ³ć‚°ć‚’ć‚³ćƒ”ćƒ³ćƒˆć‚¢ć‚¦ćƒˆć—ć¦ć„ć¾ć™ćŒć€ć‚³ćƒ”ćƒ³ćƒˆć‚¢ć‚¦ćƒˆč§£é™¤ć‚’ć™ć‚‹ćØćƒ‡ćƒćƒƒć‚°ćŒć—ć«ćććŖć‚Šć¾ć™ć®ć§ć€ćƒŖćƒŖćƒ¼ć‚¹å‰ć«č§£é™¤ć™ć‚‹ć‚ˆć†ć«ć—ć¦ćć ć•ć„ć€‚
  • čŖčØ¼ćŒęˆåŠŸć™ć‚‹ćØ态user.txtćØć„ć†åå‰ć®ćƒ•ć‚”ć‚¤ćƒ«ć«Access Token恌ę›ø恍å‡ŗ恕悌态index.htmlå“ć«ćć‚Œć‚‰ć®ęƒ…å ±ćŒåę˜ ć•ć‚Œć¾ć™ć€‚
  • scopećÆPortal恧čØ­å®šć—ćŸć‚‚ć®ćØåŒć˜ć‚‚ć®ć«åŠ ćˆć¦ć€profilećÆå…„ć‚Œć¦ćŠć„ć¦ćć ć•ć„ć€‚čŖčؼēµęžœćŒč”Øē¤ŗ恕悌ćŖ恏ćŖć£ć¦ć—ć¾ć†ć®ć§ć€‚

図ļ¼šćƒ†ćƒŠćƒ³ćƒˆIDćŒé‡č¦ć§ć™

index.htmlå“ć‚³ćƒ¼ćƒ‰

Githubć«ć‚¢ćƒƒćƒ—ć•ć‚Œć¦ć„ć‚‹index.htmlć‚’ćć®ć¾ć¾åˆ©ē”Øć•ć›ć¦ć„ćŸć ćć¾ć—ćŸć€‚ćƒ€ć‚¦ćƒ³ćƒ­ćƒ¼ćƒ‰ć—ćŸindex.htmlćÆ态viewsćƒ‡ć‚£ćƒ¬ć‚Æ惈ćƒŖć«å…„ć‚Œć¦ćŠć‘ć°ć‚Ŗćƒƒć‚±ćƒ¼ć§ć™ć€‚

ejsć‚’åˆ©ē”Ø恗恦恄恦态expresså“ć‹ć‚‰userćØć„ć†é…åˆ—ć‚’å—ć‘å–ć‚‹ćØ态index.htmlå†…ć®ę‰€å®šć®ē®‡ę‰€ć«ćƒ‡ćƒ¼ć‚æćŒå±•é–‹ć•ć‚Œć‚‹ä»•ēµ„ćæ恫ćŖć£ć¦ć„ć¾ć™ć€‚čŖčØ¼ćŒå®Œäŗ†ć—态Access TokenćŖć©ć‚’å–å¾—ć™ć‚‹ćØćć®ęƒ…å ±ćŒäø€ē›®ēž­ē„¶ćØćŖć‚Šć¾ć™ć€‚å€‹äŗŗēš„恫ćÆVue.jsä½æć£ćŸć»ć†ćŒć‚ć‹ć‚Šć‚„ć™ć„ę°—ćŒć™ć‚‹ć‘ć‚Œć©ć€‚

図ļ¼ščæ”ć£ć¦ććŸå€¤ćŒindex.htmlćøåę˜ ć•ć‚Œć‚‹

å®Ÿč”ŒēµęžœćØę³Øꄏē‚¹

å®Ÿč”Œēµęžœ

electronć‚’å®Ÿč”Œć™ć‚‹ćØ态signinćØsingout恮2恤恌å‡ŗć¦ćć¾ć™ć€‚ć‚µć‚¤ćƒ³ć‚¤ćƒ³ć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋ćØelectronå†…ć§Microsoftć®ćƒ­ć‚°ć‚¤ćƒ³ē”»é¢ćŒå‡ŗć¦ćć¦ć€ćƒ”ćƒ¼ćƒ«ć‚¢ćƒ‰ćƒ¬ć‚¹ćØćƒ‘ć‚¹ćƒÆćƒ¼ćƒ‰ć‚’å…„åŠ›ć—ć¾ć™ć€‚

ć‚µć‚¤ćƒ³ć‚¤ćƒ³ę™‚ć«Scope恧čØ­å®šć—ćŸć‚‚ć®ć«ć¤ć„ć¦ę‰æčŖć‚’ę±‚ć‚ć‚‰ć‚Œć‚‹ć®ć§ć€ć€Œę‰æč«¾ć€ćØ恙悋äŗ‹ć§ć€čŖčØ¼ćŒå®Ÿč”Œć•ć‚Œć¦ć€Access TokenćŖć©ćŒå–å¾—å‡ŗę„ć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć™ć€‚

図ļ¼šMicrosoftć®ćƒ­ć‚°ć‚¤ćƒ³ē”»é¢ćŒå‡ŗć¦ććŸ

図ļ¼šę‰æč«¾ć‚’ć™ć‚‹äŗ‹ć§ćƒˆćƒ¼ć‚Æćƒ³ćŒčæ”卓恕悌悋

ę³Øꄏē‚¹

ćƒ­ć‚°ć‚¤ćƒ³ć‚Æćƒƒć‚­ćƒ¼

ćƒ­ć‚°ć‚¤ćƒ³ē”»é¢ć«ę–¼ć„ć¦ć€ćƒ‘ć‚¹ćƒÆćƒ¼ćƒ‰ć‚’äæå­˜ē­‰ć™ć‚‹ćØ态electron恫cookiećØ恗恦äæå­˜ć•ć‚Œć¾ć™ć€‚ć‚ˆć£ć¦ć€ć“ć“ć§äæå­˜ć•ć‚Œć¦ć—ć¾ć†ćØę¬”å›žä»„é™ćƒ­ć‚°ć‚¤ćƒ³ę™‚ć«åˆ©ē”Øć•ć‚Œć‚‹ć®ć§ć€ćƒ­ć‚°ć‚¤ćƒ³ē”»é¢ćŒå‡ŗ恦恓ćŖ恏ćŖć‚Šć¾ć™ćŒć€ćć®cookiećÆ态express恌äæå­˜ć—恦悋悂恮恧ćÆćŖ恏态electron恌äæęŒć—ć¦ć„ć¾ć™ć€‚

恓恮cookiećÆć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚ÆćƒŖć‚¢ć§ćÆć‚ÆćƒŖć‚¢ć•ć‚Œć¾ć›ć‚“ć€‚Windowsć®å “åˆäæå­˜ć•ć‚Œć¦ć„ć‚‹ćƒ‘ć‚¹ćÆ仄äø‹ć®å “ꉀ恧态CookiesćØ恄恆SQLitećƒ•ć‚”ć‚¤ćƒ«ć«ę ¼ē“ć•ć‚Œć¦ć„ć¾ć™ć€‚

ć‚¢ćƒ—ćƒŖć®åē§°ćÆ态package.json恫čؘčæ°ć•ć‚Œć¦ć„ć‚‹nameå±žę€§ć®åå‰ćŒåˆ©ē”Øć•ć‚Œć¦ć„ć¾ć™ć€‚ć“ć®ćƒ‡ć‚£ćƒ¬ć‚Æ惈ćƒŖ恫恂悋Cookiesć‚’å‰Šé™¤ć™ć‚Œć°ć€å†åŗ¦ćƒ­ć‚°ć‚¤ćƒ³ćŒå‡ŗę„ć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć™ć€‚ć—ć‹ć—ć€ć“ć‚Œć‚’ę‰‹å‹•ć§ć‚„ć£ć¦ć„ć¦ćÆ非åøøć«é¢å€’ćŖ恮恧态singoutć‚’å®Ÿč”Œć—ćŸć‚‰ć€ć‚ÆćƒŖć‚¢ć™ć‚‹ć‚³ćƒ¼ćƒ‰ć‚’app.get恮/auth/signout恫čæ½åŠ å®Ÿč£…ć—ć¾ć™ć€‚

  • å†’é ­ć§sessionć«ć¦å¤‰ę•°ć‚’å®šē¾©ć—恦require(‘electron’)悒čæ½åŠ ć™ć‚‹
  • express-sessionć®å¤‰ę•°ćŒć‹ć¶ć£ć¦ć‚‹ć®ć§ć€ć“ć”ć‚‰ćÆ态var ses = require(‘express-session’);ć«å¤‰ę›“ć—ć€app.usećÆapp.use(ses({ć«å¤‰ę›“ć™ć‚‹
  • deleteAllCookies()é–¢ę•°ć‚’ä½œęˆć—ć€å…Øćƒ‡ćƒ¼ć‚æ悒ć‚ÆćƒŖć‚¢ć™ć‚‹ć‚ˆć†ć«ć™ć‚‹ć€‚CookiesćØ恄恆SQLitećƒ•ć‚”ć‚¤ćƒ«ćÆElectronćŒęŽ“ć‚“ć§ć—ć¾ć£ć¦ć‚‹ć®ć§ć€SQLitećƒ¢ć‚øćƒ„ćƒ¼ćƒ«ć‹ć‚‰DELETEćÆå‡ŗę„ć¾ć›ć‚“ć€‚
  • app.get(‘/auth/signout’恫恦态deleteAllCookies()ć‚’å®Ÿč”Œć™ć‚‹ć‚ˆć†ć«ä»•č¾¼ć‚€

ć“ć‚Œć§ć€å†ć³signin悒ć‚ÆćƒŖ惃ć‚Æ恙悋ćØćƒ­ć‚°ć‚¤ćƒ³ē”»é¢ćŒå‡ŗć¦ćć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć™ć€‚

ā€»ęœ€ę–°ē‰ˆć®Electron v12ć§ć®ęŒ™å‹•

äøŠčØ˜ć®ć‚³ćƒ¼ćƒ‰ć‚’Electron v12ć§å‹•ć‹ć—ć¦ćæ恟ćØ恓悍态ć‚Æćƒƒć‚­ćƒ¼ćŒćƒ‡ćƒŖćƒ¼ćƒˆć•ć‚ŒćŖ恄怂怂恮恧态deleteAllCookiesé–¢ę•°ć‚’ä»„äø‹ć®ć‚ˆć†ć«å˜ē“”åŒ–ć—ćŸćØć“ć‚ć€å•é”ŒćŖćå‹•ćć¾ć—ćŸć€‚

ć‚¢ć‚Æć‚»ć‚¹ćƒˆćƒ¼ć‚Æćƒ³ć«ć¤ć„ć¦

今回ćÆuser.txt恫Access Token悒ę›ø恍å‡ŗć™ć‚ˆć†ć«ć—ć¦ć„ć¾ć™ćŒć€å®Ÿéš›ć«ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ćØć—ć¦åˆ©ē”Øć™ć‚‹å “åˆć«ćÆć€å„OSć®č³‡ę ¼ęƒ…å ±ćƒžćƒćƒ¼ć‚øćƒ£ć«ę ¼ē“ć™ć¹ćć§ć™ć€‚

今回ćÆ恓恓恧ćÆē“¹ä»‹ć—ć¦ć„ć¾ć›ć‚“ćŒć€ä»„前ē“¹ä»‹ć—ćŸčؘäŗ‹ć«ćŠć„恦态node.jsć‹ć‚‰č³‡ę ¼ęƒ…å ±ćƒžćƒćƒ¼ć‚øćƒ£ć«ęƒ…å ±ć‚’ę ¼ē“ć™ć‚‹ć€Œkeytarć€ćƒ¢ć‚øćƒ„ćƒ¼ćƒ«ć‚’ä½æć£ć¦ć€Access Token悄Refresh Tokenć‚’ę ¼ē“ć—ć¦ćŠććØč‰Æ恄恧恗悇恆怂

ć¾ćŸć€ć‚¢ć‚Æć‚»ć‚¹ćƒˆćƒ¼ć‚Æćƒ³ćÆåŸŗęœ¬ć€1ę™‚é–“ć§å¤±åŠ¹ć—ć¾ć™ć€‚ćć®ć¾ć¾ć§ćÆ再åŗ¦ćƒ­ć‚°ć‚¤ćƒ³ć—恦ꖰ恗恄Access Tokenć®å–å¾—ćŒåæ…č¦ć§ć™ćŒć€ć“ć‚Œć§ćÆäøä¾æ恧恙怂Refresh Tokenć‚’åˆ©ē”Ø恗恦ꖰ恗恄Access Token悒č‡Ŗå‹•ć§å–å¾—ć™ć‚‹ä»•ēµ„ćæćŒåˆ„é€”åæ…要恫ćŖć‚Šć¾ć™ć€‚ć“ć®č¾ŗ悊ćÆę¬”å›žć®čؘäŗ‹ć«ć¦č§£čŖ¬ć—恦ćæ悈恆ćØę€ć„ć¾ć™ć€‚

Account is Requiredć‚Øćƒ©ćƒ¼

ę„­å‹™ē”Øć®ćƒ†ćƒŠćƒ³ćƒˆć§é–‹ē™ŗć—ć¦ćŸéš›ć«é­é‡ć—ćŸć‚Øćƒ©ćƒ¼ć§ć™ćŒć€ćƒ—ćƒ­ć‚ø悧ć‚Æćƒˆä½œęˆč€…ć§ć‚ć‚‹č‡Ŗ分ćÆä½•ć‚‰å•é”ŒćŖ恏čŖčØ¼ć—ć¦Access Tokenć‚’å–å¾—ć§ćć‚‹ć®ć§ć™ćŒć€åŒć˜ćƒ†ćƒŠćƒ³ćƒˆēµ„ē¹”å†…ć«ć„ć‚‹åˆ„ć®ćƒ¦ćƒ¼ć‚¶ćŒčŖčØ¼ć‚’ć—ć‚ˆć†ćØ恗恟悉态Account is Requiredć‚Øćƒ©ćƒ¼ćŒå‡ŗ恦čŖčØ¼ćŒå‡ŗę„ć¾ć›ć‚“ć§ć—ćŸć€‚

ēµ„ē¹”å¤–ć®äŗŗ間恫čŖčØ¼ć‚’čرåÆć™ć‚‹å “åˆć«ćÆ态Azure Active Directory恫åÆ¾č±”ć®ćƒ¦ćƒ¼ć‚¶ć‚’ē™»éŒ²ć™ć‚Œć°ēµ„ē¹”内ćØć—ć¦ę‰±ć£ć¦ćć‚Œć‚‹ć®ć§å•é”ŒćŖć„ć®ć§ć™ćŒć€ć‚‚ćØ悂ćØåŒć˜ēµ„ē¹”内ćŖ恮恫čŖčؼå‡ŗę„ćŖć„å•é”Œć‚’čŖæęŸ»ć—ć¦ćæ恟ćØ恓悍

怌Microsoft Graph API恮scope恫openidćŒå…„ć£ć¦ć„ćŖć‹ć£ćŸć€

ć®ćŒåŽŸå› ć§ć—ćŸć€‚åŒę§˜ć®å•é”Œć«é­é‡ć—ćŸå “åˆć€ć‚¢ć‚Æć‚»ć‚¹čرåÆćØ恗恦openid悒čæ½åŠ ć—ć¾ć—ć‚‡ć†ć€‚ćŸć ć—ć€Node.jsć®ć‚³ćƒ¼ćƒ‰å†…ć§ćÆscope恫openidć‚’ć‚ćˆć¦čæ½åŠ ć™ć‚‹åæ…要ꀧćÆćŖ恄ćæ恟恄怂ćŖćć¦ć‚‚čŖčؼćÆå‡ŗę„ć¾ć—ćŸć€‚

図ļ¼šēµę§‹åµŒć£ćŸå•é”Œć§ć—ćŸ

ćƒ“ćƒ«ćƒ‰ć—ćŸć‚‰user.jsonćŒč¦‹ć¤ć‹ć‚‰ćŖ恄

ć‚„ć‚„ć“ć—ć„ć®ć§ć™ćŒć€é–‹ē™ŗē‰ˆć®ć‚³ćƒ¼ćƒ‰ć®å “åˆć€fsćŖć‚Šć§ćƒ•ć‚”ć‚¤ćƒ«ć‚’čŖ­ćæć«ć„ćå “åˆć€ćƒ•ć‚”ć‚¤ćƒ«ćŒå®Ÿč”Œć™ć‚‹ćƒ‡ć‚£ćƒ¬ć‚Æ惈ćƒŖćØåŒć˜ćƒ•ć‚©ćƒ«ćƒ€ć«ć‚ć‚‹å “åˆć«ćÆ__dirnameć‚’ć¤ć‘ćšć«ćƒ•ć‚”ć‚¤ćƒ«ć‚’ęŒ‡å®šć™ć‚‹ćØčŖ­ć‚ćŖć„å “åˆćŒć‚ć‚Šć¾ć™ć€‚é€†ć«ćƒ“ćƒ«ćƒ‰ć—ćŸå “åˆć«ćÆ态__dirnamećŒć¤ć„ć¦ć‚‹ćØčŖ­ć‚ćŖć„ć‚±ćƒ¼ć‚¹ćŒć‚ć‚Šć¾ć™ļ¼ˆexećŒć‚ć‚‹å “ę‰€ć«user.jsonćŒć‚ć‚‹ć®ć«ć€__dirnamećŒć¤ć„ć¦ć‚‹ćØappå†…ć‚’čŖ­ćæć«č”Œć£ć¦ć—ć¾ć†ć€‚

Electron開ē™ŗ恧ćÆć“ć®ć‚ˆć†ć«é–‹ē™ŗ途äø­ćØćƒ“ćƒ«ćƒ‰ē‰ˆćØć§ęŒ™å‹•ć«å·®ćŒē”Ÿć˜ć‚‹äŗ‹ćŒć‚ć‚Šć¾ć™ć€‚ćć“ć§ć€é–‹ē™ŗē‰ˆćŖ恮恋ļ¼Ÿćƒ“ćƒ«ćƒ‰ē‰ˆćŖć®ć‹ć‚’åˆ¤å®šć—ćƒ‘ć‚¹ć‚„ć‚³ćƒ¼ćƒ‰ć®ęŒ™å‹•ć‚’å¤‰ćˆć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ćŒć€éƒ½åŗ¦å¤‰ćˆć¦ć„ć‚‹ćØ大変ćŖć®ć§ć€åˆ¤å®šēµęžœć«åŸŗć„ć„ć¦å¤‰ę•°ć«ę ¼ē“ć™ć‚‹ć‚ˆć†ć«ć™ć‚‹ćØč‰Æ恄恧恗悇恆怂

ć“ć”ć‚‰ć§ć‚³ćƒ”ćƒ³ćƒˆć§ć„ćŸć ćć¾ć—ćŸć€‚ć‚ć‚ŠćŒćØć†ć”ć–ć„ć¾ć™ć€‚

å®Ÿéš›ć«ć“ć‚“ćŖę„Ÿć˜ć§å¤‰ę•°ć‚’ē”Øꄏ恗恟悊态app恫åÆ¾ć—ć¦ęŒ™å‹•ć‚’čØ­å®šć—ć¾ć™ć€‚

  • app.isPackagedć«ć¦ćƒ“ćƒ«ćƒ‰ē‰ˆćŖć®ć‹ć©ć†ć‹åˆ¤å®šćŒåÆčƒ½ć€‚true恌čæ”ć£ć¦ććŸć‚‰ć€exeć‹ć‚‰ć®å®Ÿč”ŒćØćŖ悋恮恧态user.jsonćÆē›“äø‹ć‚’ćć®ć¾ć¾ęŒ‡å®šć™ć‚‹
  • åÆ¾ć—ć¦é–‹ē™ŗē‰ˆć®å “åˆć€user.jsonćÆ__dirnameć‚’ć¤ć‘ć¦ćƒ•ćƒ«ćƒ‘ć‚¹ć‚’ęŒ‡å®šć™ć‚‹ć€‚ć¾ćŸć€urlscheme恮čØ­å®šć‚‚ć“ć®ę–¹ę³•ć§åˆ†å²ćŒć§ćć‚‹
  • äø”者恧user.json恮čŖ­ćæę–¹ćŒē•°ćŖ悋ē†ē”±ćÆć€ćƒ“ćƒ«ćƒ‰ē‰ˆć®å “合exe恮ē›“äø‹ćÆčŖ­ć‚ć¾ć™ćŒć€é–‹ē™ŗē‰ˆć®å “合electron .ć§å®Ÿč”Œć™ć‚‹ē‚ŗć€ćć®ćƒ•ć‚©ćƒ«ćƒ€ć®ē›“äø‹ć§ćÆćŖ恏态electron.exe恮ē›“äø‹ć‚’čŖ­ćæć«č”Œć£ć¦ć—ć¾ć†ćŸć‚ć€‚__dirname悒恤恑悋恓ćØ恧态electron .ć§å®Ÿč”Œć—ć¦ć‚‚ć€ć‚³ćƒ¼ćƒ‰ć®ć‚ć‚‹ćƒ•ć‚©ćƒ«ćƒ€ć®ē›“äø‹ć‚’čŖ­ćæć«č”Œć£ć¦ćć‚Œć‚‹ć€‚äø€ę–¹ć§ć€ćƒ“ćƒ«ćƒ‰ē‰ˆć®å “åˆć€ć‚³ćƒ¼ćƒ‰é”žćÆapp仄äø‹ć«åŽć‚ć‚‰ć‚Œć¦ć‚‹ć‘ć‚Œć©ć€user.json悒ē”Ÿęˆć™ć‚‹ćØexe恮ē›“äø‹ć«ć§ćć‚‹ē‚ŗ态appē›“äø‹ć«user.json恌ē„”恄恓ćØ恫ćŖ悋怂ćÆ恘悁恋悉ćŖć‚‹ć¹ćć“ć®ę‰‹ć®čØ­å®šćƒ•ć‚”ć‚¤ćƒ«ćÆē›“äø‹ć§ćÆćŖćć€ć©ć“ć‹ćƒ•ćƒ«ćƒ‘ć‚¹ć®é€šć‚‹å “ę‰€ć«äæå­˜ć™ć‚‹ć‚ˆć†ć«ć™ć‚‹ćØ余č؈ćŖę··ä¹±ć‚’ć›ćšć«ęøˆć‚€ćØę€ć„ć¾ć™ć€‚

仄äø‹ćÆuser.jsonć‚’ćƒžć‚¤ćƒ‰ć‚­ćƒ„ćƒ”ćƒ³ćƒˆē›“äø‹ć«ęŒ‡å®šć™ć‚‹ę–¹ę³•ć§ć™ć€‚

  • userjsonå¤‰ę•°ć‚’å‚ē…§ć™ć‚‹ć‚ˆć†ć«ć™ć‚Œć°é–‹ē™ŗć§ć‚‚ćƒ“ćƒ«ćƒ‰ć§ć‚‚ę··ä¹±ć›ćšć«ęøˆćæć¾ć™ć€‚

関連ćƒŖćƒ³ć‚Æ

å…±ęœ‰ć—ć¦ćæ悋ļ¼š