Microsoft ID + Node-RED로 로그인 기능 만들기
지식 재료
이용환경
이번 목표
조직의 Microsoft 계정으로 로그인할 수 있는 웹 응용 프로그램의 로그인 부분을 Node-RED로 구현합니다.
실천 개요
Microsoft Application ID 획득
Azure에 로그인한 후 왼쪽 메뉴에서 Azure Active Directoryメニュー
를 클릭합니다.
이 이후에는 Azure Active Directory (AzureAD)
의 메뉴를 조작한다.
애플리케이션 등록
애플리케이션 작성
조직의 App registrationsメニュー
를 클릭하십시오.
App registrations 대화상자의 상단 "+ New registration"을 클릭합니다.
Register an application
대화 상자에서 Name
속성에이 응용 프로그램의 이름을 입력합니다. (예에서는 TestLogin
)
입력이 끝나면 대화 상자 하단의 Register를 클릭하십시오.
응용 프로그램 작성이 완료되면 응용 프로그램 속성 화면에서 Application (client) ID
및 Directory (tenant) ID
를 기록합니다.
RedirectURL 등록
작성한 어플리케이션의 다이얼로그에서 Authentication
메뉴를 클릭해, RedirectURL
에, 지금부터 작성하는 웹 어플리케이션의 톱 페이지의 URL 를 입력한다.
입력이 완료되면 대화상자 상단의 Save를 클릭합니다.
Client secrets 만들기
작성한 어플리케이션의 다이얼로그에서 Certificates & secrets
메뉴를 클릭해, 다이얼로그 하단의 Client secrets
로부터 「+New client secret」버튼을 클릭해, 새로운 client secret 를 작성해, 메모한다. (유효 기한은 적절히 선택한다)
Node-RED 흐름 생성
흐름 소스
(1)ログイン画面へ
및 (2)Token 取得
의 Function 노드에서 다음을 적절한 값으로 변경하십시오.
[{"id":"946738f8.0aea78","type":"tab","label":"Microsoft ID","disabled":false,"info":""},{"id":"f2fd2be5.f839b8","type":"http in","z":"946738f8.0aea78","name":"","url":"/msapp","method":"get","upload":false,"swaggerDoc":"","x":90,"y":60,"wires":[["f936e317.9c61e"]]},{"id":"80013dcd.a758f","type":"http in","z":"946738f8.0aea78","name":"","url":"/mslogin","method":"post","upload":false,"swaggerDoc":"","x":90,"y":140,"wires":[["77eca14a.70ea5","7bd7564c.af5b58"]]},{"id":"f936e317.9c61e","type":"function","z":"946738f8.0aea78","name":"(1)ログイン画面ヘ","func":"var tenant = {Directory (tenant) ID};\nvar clientid = {Application (client) ID};\nvar redirectURL = {RedirectURL};\n\nmsg.url = \"https://login.microsoftonline.com/\" + tenant + \n \"/oauth2/authorize\";\n \nmsg.method = \"GET\";\nmsg.statusCode = 303;\nmsg.headers = {\n location : \n msg.url + \n \"?client_id=\" + clientid + \n '&response_type=code' + \n '&redirect_uri=' + encodeURIComponent(redirectURL) + \n '&response_mode=form_post' + \n '&state=nagi_hisakawa'\n};\nmsg.payload = {};\nreturn msg;\n","outputs":1,"noerr":0,"x":330,"y":60,"wires":[["2a2e40a7.09177"]]},{"id":"2a2e40a7.09177","type":"http response","z":"946738f8.0aea78","name":"","statusCode":"","headers":{},"x":670,"y":60,"wires":[]},{"id":"77eca14a.70ea5","type":"debug","z":"946738f8.0aea78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":310,"y":220,"wires":[]},{"id":"7bd7564c.af5b58","type":"function","z":"946738f8.0aea78","name":"(2)Token 取得","func":"var tenant = {Directory (tenant) ID};\nvar clientid = {Application (client) ID};\nvar redirectURL = {RedirectURL};\nvar secret = {client secret};\n\nmsg.url = \"https://login.microsoftonline.com/\" + tenant + \"/oauth2/token\";\n\nmsg.method = \"POST\";\nmsg.headers = \n{\n 'Content-Type': \"application/x-www-form-urlencoded\"\n}\n\nmsg.payload = {\n 'grant_type' : \"authorization_code\",\n 'client_id' : clientid,\n 'code' : msg.payload.code,\n 'redirect_uri' : redirectURL,\n 'client_secret': secret,\n 'resource' : clientid\n};\nreturn msg;\n","outputs":1,"noerr":5,"x":320,"y":140,"wires":[["22ae285e.090488"]]},{"id":"22ae285e.090488","type":"http request","z":"946738f8.0aea78","name":"","method":"use","ret":"obj","url":"","tls":"","x":490,"y":140,"wires":[["2c257eeb.8c3312"]]},{"id":"2c257eeb.8c3312","type":"function","z":"946738f8.0aea78","name":"(3)JWT 展開","func":"var base64Url = msg.payload.id_token.split('.')[1];\nvar base64 = base64Url.replace('-', '+').replace('_', '/');\nvar bb = new Buffer(base64, 'base64').toString();\nvar c = JSON.parse(bb);\nmsg.payload = c;\n//msg.payload.user = c.name;\n\nreturn msg;\n","outputs":1,"noerr":0,"x":490,"y":180,"wires":[["2a2e40a7.09177"]]}]
실행 및 결과
https://ホスト名/msapp
로 이동하면 Microsoft 로그인 화면으로 리디렉션됩니다.로그인에 성공하면 로그인한 사용자 정보가 브라우저에 표시됩니다.
Reference
이 문제에 관하여(Microsoft ID + Node-RED로 로그인 기능 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Kakimoty_Field/items/0e5200114de1ba29e15d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)