From d45edef66ffe6749cc671fb1d21ac69e5ae0eb65 Mon Sep 17 00:00:00 2001 From: David Chesnut Date: Tue, 10 Sep 2024 16:06:53 -0700 Subject: [PATCH] New sample: Use NAA SSO from event-based code in Outlook add-in (#832) * initial commit * add readme details * clean up code and don't call acquireTokenPopup * add task pane sign in feature * add id placeholders * use beta channel * Add note for using dev build * fix note formatting * fix note formatting * add info on outlook support * add info link * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * added fallback code to sign in using task pane * Merge branch 'davech-event-naa' of https://github.com/OfficeDev/Office-Add-in-samples into davech-event-naa * Updates to clean up code. * updates to work in Outlook online * Changes to confirm OWA and desktop support working * add debug files for VS Code * Apply suggestions from code review Co-authored-by: Linda Cannon * applies to web * update packages * Update Samples/auth/Outlook-Event-SSO-NAA/src/launchevent/launchevent.js Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Co-authored-by: Linda Cannon --- .../auth/Outlook-Event-SSO-NAA/.eslintrc.json | 8 + Samples/auth/Outlook-Event-SSO-NAA/.gitignore | 130 + .../.vscode/extensions.json | 13 + .../Outlook-Event-SSO-NAA/.vscode/launch.json | 34 + .../.vscode/settings.json | 8 + .../Outlook-Event-SSO-NAA/.vscode/tasks.json | 156 + Samples/auth/Outlook-Event-SSO-NAA/README.md | 135 + .../Outlook-Event-SSO-NAA/assets/icon-128.png | Bin 0 -> 4693 bytes .../Outlook-Event-SSO-NAA/assets/icon-16.png | Bin 0 -> 1596 bytes .../Outlook-Event-SSO-NAA/assets/icon-32.png | Bin 0 -> 2386 bytes .../Outlook-Event-SSO-NAA/assets/icon-64.png | Bin 0 -> 2112 bytes .../Outlook-Event-SSO-NAA/assets/icon-80.png | Bin 0 -> 4836 bytes .../assets/logo-filled.png | Bin 0 -> 11915 bytes .../Outlook-Event-SSO-NAA/assets/sample.json | 41 + .../Outlook-Event-SSO-NAA/babel.config.json | 3 + .../auth/Outlook-Event-SSO-NAA/manifest.xml | 144 + .../Outlook-Event-SSO-NAA/package-lock.json | 14797 ++++++++++++++++ .../auth/Outlook-Event-SSO-NAA/package.json | 65 + .../src/launchevent/authconfig.js | 4 + .../src/launchevent/commands.html | 17 + .../src/launchevent/launchevent.js | 163 + .../src/taskpane/button.css | 120 + .../src/taskpane/taskpane.css | 80 + .../src/taskpane/taskpane.html | 47 + .../src/taskpane/taskpane.js | 93 + .../microsoft-officeaddins-allowed.json | 6 + .../Outlook-Event-SSO-NAA/webpack.config.js | 114 + 27 files changed, 16178 insertions(+) create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/.eslintrc.json create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/.gitignore create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/.vscode/extensions.json create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/.vscode/launch.json create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/.vscode/settings.json create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/.vscode/tasks.json create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/README.md create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/assets/icon-128.png create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/assets/icon-16.png create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/assets/icon-32.png create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/assets/icon-64.png create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/assets/icon-80.png create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/assets/logo-filled.png create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/assets/sample.json create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/babel.config.json create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/manifest.xml create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/package-lock.json create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/package.json create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/src/launchevent/authconfig.js create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/src/launchevent/commands.html create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/src/launchevent/launchevent.js create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/src/taskpane/button.css create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/src/taskpane/taskpane.css create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/src/taskpane/taskpane.html create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/src/taskpane/taskpane.js create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/src/well-known/microsoft-officeaddins-allowed.json create mode 100644 Samples/auth/Outlook-Event-SSO-NAA/webpack.config.js diff --git a/Samples/auth/Outlook-Event-SSO-NAA/.eslintrc.json b/Samples/auth/Outlook-Event-SSO-NAA/.eslintrc.json new file mode 100644 index 000000000..e406c09e8 --- /dev/null +++ b/Samples/auth/Outlook-Event-SSO-NAA/.eslintrc.json @@ -0,0 +1,8 @@ +{ + "plugins": [ + "office-addins" + ], + "extends": [ + "plugin:office-addins/recommended" + ] +} diff --git a/Samples/auth/Outlook-Event-SSO-NAA/.gitignore b/Samples/auth/Outlook-Event-SSO-NAA/.gitignore new file mode 100644 index 000000000..6a7d6d8ef --- /dev/null +++ b/Samples/auth/Outlook-Event-SSO-NAA/.gitignore @@ -0,0 +1,130 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* \ No newline at end of file diff --git a/Samples/auth/Outlook-Event-SSO-NAA/.vscode/extensions.json b/Samples/auth/Outlook-Event-SSO-NAA/.vscode/extensions.json new file mode 100644 index 000000000..c5fccff07 --- /dev/null +++ b/Samples/auth/Outlook-Event-SSO-NAA/.vscode/extensions.json @@ -0,0 +1,13 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations. + // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp + + // List of extensions which should be recommended for users of this workspace. + "recommendations": [ + "ms-edgedevtools.vscode-edge-devtools", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode" + ], + // List of extensions recommended by VS Code that should not be recommended for users of this workspace. + "unwantedRecommendations": [] +} diff --git a/Samples/auth/Outlook-Event-SSO-NAA/.vscode/launch.json b/Samples/auth/Outlook-Event-SSO-NAA/.vscode/launch.json new file mode 100644 index 000000000..db9261534 --- /dev/null +++ b/Samples/auth/Outlook-Event-SSO-NAA/.vscode/launch.json @@ -0,0 +1,34 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Direct Debugging", + "type": "node", + "request": "attach", + "port": 9223, + "timeout": 600000, + "trace": true + }, + { + "name": "Outlook Desktop (Edge Chromium)", + "type": "msedge", + "request": "attach", + "port": 9229, + "timeout": 600000, + "webRoot": "${workspaceRoot}", + "preLaunchTask": "Debug: Outlook Desktop", + "postDebugTask": "Stop Debug" + }, + { + "name": "Outlook Desktop (Edge Legacy)", + "type": "office-addin", + "request": "attach", + "url": "https://localhost:3000/taskpane.html?_host_Info=Outlook$Win32$16.01$en-US$$$$0", + "port": 9222, + "timeout": 600000, + "webRoot": "${workspaceRoot}", + "preLaunchTask": "Debug: Outlook Desktop", + "postDebugTask": "Stop Debug" + } + ] +} \ No newline at end of file diff --git a/Samples/auth/Outlook-Event-SSO-NAA/.vscode/settings.json b/Samples/auth/Outlook-Event-SSO-NAA/.vscode/settings.json new file mode 100644 index 000000000..5dec57b1d --- /dev/null +++ b/Samples/auth/Outlook-Event-SSO-NAA/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript" + ] + } + \ No newline at end of file diff --git a/Samples/auth/Outlook-Event-SSO-NAA/.vscode/tasks.json b/Samples/auth/Outlook-Event-SSO-NAA/.vscode/tasks.json new file mode 100644 index 000000000..642b3d7bd --- /dev/null +++ b/Samples/auth/Outlook-Event-SSO-NAA/.vscode/tasks.json @@ -0,0 +1,156 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Build (Development)", + "type": "npm", + "script": "build:dev", + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "clear": true, + "panel": "shared", + "showReuseMessage": false + } + }, + { + "label": "Build (Production)", + "type": "npm", + "script": "build", + "group": "build", + "presentation": { + "clear": true, + "panel": "shared", + "showReuseMessage": false + } + }, + { + "label": "Debug: Excel Desktop", + "type": "shell", + "command": "npm", + "args": [ + "run", + "start:desktop", + "--", + "--app", + "excel" + ], + "presentation": { + "clear": true, + "panel": "dedicated" + }, + "problemMatcher": [] + }, + { + "label": "Debug: Outlook Desktop", + "type": "shell", + "command": "npm", + "args": [ + "run", + "start:desktop", + "--", + "--app", + "outlook" + ], + "presentation": { + "clear": true, + "panel": "dedicated" + }, + "problemMatcher": [] + }, + { + "label": "Debug: PowerPoint Desktop", + "type": "shell", + "command": "npm", + "args": [ + "run", + "start:desktop", + "--", + "--app", + "powerpoint" + ], + "presentation": { + "clear": true, + "panel": "dedicated" + }, + "problemMatcher": [] + }, + { + "label": "Debug: Word Desktop", + "type": "shell", + "command": "npm", + "args": [ + "run", + "start:desktop", + "--", + "--app", + "word" + ], + "presentation": { + "clear": true, + "panel": "dedicated" + }, + "problemMatcher": [] + }, + { + "label": "Dev Server", + "type": "npm", + "script": "dev-server", + "presentation": { + "clear": true, + "panel": "dedicated" + }, + "problemMatcher": [] + }, + { + "label": "Install", + "type": "npm", + "script": "install", + "presentation": { + "clear": true, + "panel": "shared", + "showReuseMessage": false + }, + "problemMatcher": [] + }, + { + "label": "Lint: Check for problems", + "type": "npm", + "script": "lint", + "problemMatcher": [ + "$eslint-stylish" + ] + }, + { + "label": "Lint: Fix all auto-fixable problems", + "type": "npm", + "script": "lint:fix", + "problemMatcher": [ + "$eslint-stylish" + ] + }, + { + "label": "Stop Debug", + "type": "npm", + "script": "stop", + "presentation": { + "clear": true, + "panel": "shared", + "showReuseMessage": false + }, + "problemMatcher": [] + }, + { + "label": "Watch", + "type": "npm", + "script": "watch", + "presentation": { + "clear": true, + "panel": "dedicated" + }, + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/Samples/auth/Outlook-Event-SSO-NAA/README.md b/Samples/auth/Outlook-Event-SSO-NAA/README.md new file mode 100644 index 000000000..b7911dc29 --- /dev/null +++ b/Samples/auth/Outlook-Event-SSO-NAA/README.md @@ -0,0 +1,135 @@ +--- +page_type: sample +urlFragment: outlook-event-sso-naa +products: + - office + - office-outlook +languages: + - javascript +extensions: + contentType: samples + technologies: + - Add-ins + createdDate: "08/20/2024 10:00:00 AM" +description: "This sample shows how to implement SSO in an event in an Outlook add-in by using nested app authentication." +--- + +# Implement SSO in events in an Outlook add-in using nested app authentication (preview) + +## Summary + +This sample demonstrates how to use single sign-on (SSO) in an Outlook add-in event using the Microsoft Authentication Library for JavaScript (MSAL.js) and nested app authentication (NAA) to access Microsoft Graph APIs for the authenticated user. The sample displays the signed-in user's name as a signature in the body of a new email or calendar item. + +> [!IMPORTANT] +> Nested app authentication is currently in preview. To try this feature, join the [Microsoft 365 Insider Program](https://insider.microsoft365.com/join) and choose **Beta Channel**. Don't use NAA in production add-ins. We invite you to try out NAA in test or development environments and welcome feedback on your experience through GitHub (see https://github.com/OfficeDev/office-js/issues). + +## Features + +- Use MSAL.js NAA to get an access token for the signed in user to call Microsoft Graph APIs. +- Get an access token through NAA in the `OnNewMessageCompose` and `OnNewAppointmentOrganizer` events. +- Add a signature to an email or calendar invite with the signed-in user's name. + +## Applies to + +- Outlook (Beta Channel for classic Outlook only, new Outlook coming soon). +- Outlook on the web. + +For more information on supported platforms, see [NAA supported accounts and hosts](https://learn.microsoft.com/office/dev/add-ins/develop/enable-nested-app-authentication-in-your-add-in#naa-supported-accounts-and-hosts). + +## Prerequisites + +- Office connected to a Microsoft 365 subscription (including Office on the web). +- You need to join the [Microsoft 365 Insider Program](https://insider.microsoft365.com/join) to use the NAA preview features. Choose the **Beta Channel** insider level. +- [Node.js](https://nodejs.org/) version 16 or greater. +- [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) version 8 or greater. + +## Build and run the solution + +### Create an application registration + +1. Go to the [Azure portal - App registrations](https://go.microsoft.com/fwlink/?linkid=2083908) page to register your app. +1. Sign in with the ***admin*** credentials to your Microsoft 365 tenancy. For example, **MyName@contoso.onmicrosoft.com**. +1. Select **New registration**. On the **Register an application** page, set the values as follows. + + - Set **Name** to `Outlook-Event-SSO-NAA`. + - Set **Supported account types** to **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)**. + - In the **Redirect URI** section, ensure that **Single-page application (SPA)** is selected in the drop down and then set the URI to `brk-multihub://localhost:3000`. + - Select **Register**. + +1. On the **Outlook-Add-in-SSO-NAA** page, copy and save the value for the **Application (client) ID**. You'll use it in the next section. + +For more information on how to register your application, see [Register an application with the Microsoft Identity Platform](https://learn.microsoft.com/graph/auth-register-app-v2). + +### Configure the sample + +1. Clone or download this repository. +1. From the command line, or a terminal window, go to the root folder of this sample at `/samples/auth/Outlook-Event-SSO-NAA`. +1. Open the `src/launchevent/authconfig.js` file. +1. Replace the placeholder "Enter_the_Application_Id_Here" with the Application ID that you copied. +1. Save the file. + +## Run the sample + +First ensure you're signed in and consent to the add-in's scopes. Once you approve consent, you no longer need to do those steps. + +1. Run the following commands. + + `npm install` + `npm run build:dev` + `npm run start` + + This will start the web server and sideload the add-in to Outlook. + +1. Start Outlook (classic) and sign in. +1. Open an existing email item. +1. Choose "Show Task Pane" from the ribbon. This will open the task pane of the add-in. +1. Select the **Sign in** button to sign in. You may be prompted to consent to the scopes of the add-in. The task pane will indicate it signed in by displaying your user name. + +Now you can use the event-based code. + +1. Create a new email. The add-in will automatically add a signature with your signed in name. + +## Debugging steps + +To debug this sample, follow the instructions in [Debug your event-based or spam-reporting Outlook add-in](https://learn.microsoft.com/office/dev/add-ins/outlook/debug-autolaunch). All `console.log` statements from the event code appear in the [runtime log](https://learn.microsoft.com/office/dev/add-ins/testing/runtime-logging). + +## Key parts of this sample + +### Events using MSAL.js with NAA + +The `src/launchevent/launchevent.js` file contains the code for the Outlook events. It initializes the public client application (PCA) for MSAL and calls `acquireTokenSilent` to get the access token. It does not call `acquireTokenPopup` because event code cannot interact with UI. If `acquiretokenSilent` fails, it will log the error. `console.write` statements will write messages to the [runtime log](https://learn.microsoft.com/office/dev/add-ins/testing/runtime-logging). + +### Webpack configuration and hot reload + +The `webpack.config.js` file is updated from what yo office generates. Hot reload code from webpack is not supported in the JS runtime for Outlook events. The webpack config modifiations ensure you can import the MSAL.js library without the hot reload code. + +### Well-known URI + +The `src/well-known/microsoft-officeaddins-allowed.json` file lists `https://localhost:3000/public/launchevent.js` as an allowed file to access SSO. For more information, see [Use single sign-on (SSO) or cross-origin resource sharing (CORS) in your event-based or spam-reporting Outlook add-in](https://learn.microsoft.com/office/dev/add-ins/outlook/use-sso-in-event-based-activation). + +## Security reporting + +If you find a security issue with our libraries or services, report the issue to [secure@microsoft.com](mailto:secure@microsoft.com) with as much detail as you can provide. Your submission may be eligible for a bounty through the [Microsoft Bounty](https://aka.ms/bugbounty) program. Don't post security issues to [GitHub Issues](https://github.com/AzureAD/microsoft-authentication-library-for-android/issues) or any other public site. We'll contact you shortly after receiving your issue report. We encourage you to get new security incident notifications by visiting [Microsoft technical security notifications](https://technet.microsoft.com/security/dd252948) to subscribe to Security Advisory Alerts. + +## Questions and feedback + +- Did you experience any problems with the sample? [Create an issue](https://github.com/OfficeDev/Office-Add-in-samples/issues/new/choose) and we'll help you out. +- We'd love to get your feedback about this sample. Go to our [Office samples survey](https://aka.ms/OfficeSamplesSurvey) to give feedback and suggest improvements. +- For general questions about developing Office Add-ins, go to [Microsoft Q&A](https://learn.microsoft.com/answers/topics/office-js-dev.html) using the office-js-dev tag. + +## More resources + +- NAA public preview blog: https://aka.ms/NAApreviewblog +- [Updates on deprecating legacy Exchange Online tokens for Outlook add-ins](https://devblogs.microsoft.com/microsoft365dev/updates-on-deprecating-legacy-exchange-online-tokens-for-outlook-add-ins/?commentid=1131) +- NAA docs to get started: https://aka.ms/NAAdocs +- NAA FAQ: https://aka.ms/NAAFAQ +- NAA Outlook sample: https://aka.ms/NAAsampleOutlook +- NAA Word, Excel, and PowerPoint sample: https://aka.ms/NAAsampleOffice + +## Copyright + +Copyright (c) 2024 Microsoft Corporation. All rights reserved. + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + + \ No newline at end of file diff --git a/Samples/auth/Outlook-Event-SSO-NAA/assets/icon-128.png b/Samples/auth/Outlook-Event-SSO-NAA/assets/icon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..37dfcd77025e49f00ad33c41543f9f013cd94a83 GIT binary patch literal 4693 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 literal 0 HcmV?d00001 diff --git a/Samples/auth/Outlook-Event-SSO-NAA/assets/icon-32.png b/Samples/auth/Outlook-Event-SSO-NAA/assets/icon-32.png new file mode 100644 index 0000000000000000000000000000000000000000..dcf56db7089a10edc61a0914be2af6736c8c676c GIT binary patch literal 2386 zcmbVOX;2es8t#w~5{5vyBA3zx&_zkoImjg-fq(=FA_j;fD+x&>QF53B2?{%Mh=3@& z=&Inch^2TUIO72_Gs>}`Fs_c*Dkvg~sGuSWjvP*-;_eS?YHPcytH1B-=Xu}fy{f*# z=%|GROBYK300^RRVGQyGr(PTu08p5$h$Lj=Yz&nemui!Z>2f^`2$b3+7!;}HE8!Se zuFP0-3HAp7^jeifYLtp2`3kL?DxbnoO==y&1_1vBCY@Zd8a9GS@Jf{?fc*0O&ty=g z3?Rq*i6OBr1Wr+fuhYXz*F{Mb>sBjxO7en0(BH&I45(qF95ks@H3q&Zfc()eA6ZWw z)5zdQh;elQ`I9KAI2sJm>S552%BCpjOfJabQR#j>E`#L@G9Wse2JvWg76qd7As!#1 zgP$KV;!Uqi=En%bKKnv;0pt{;QOBpz($mwa=}f9tzmi7h@pv?dL1Qo|2!dkB&=}<= zipJnMZ9xbd6nd4;sM2b{DU0$XZJIHFj41sSf?6jQe=)2vd`=XSGMY)QqtU4lO|71a z>m%A=jDi0nqogF$*_8SZ>tnC0cFj zbQeUYXpLG!idF}PgiKYP1O6#qrBQ0r4L(z4`V_Sg)~nXS$}qiF4SvisU-cCY|6BZ@ z_{#q`e>6lCZK_%Rt9ho6kdB;Mei;R1^JSP|4KhJ`WKNU&xk(?p< zmLEpzf`USrMP&qsR8qPeME$1Q&*kAxx&K*hynCoXQDAaGNHAFRbmcq z17NnP>Hd%FdpsqU#*&XU==W=1`)9r1-ZT8e6?*289-@T6Z>%bzU^vJ8sK#m?#=QbCPbk~`Rkez-iyA63Aq zsM~-70XVj!)WacEJG6guH%;f5T9ooze%!%6?84n@mEPxY?TKqd3)ckiiym#4YCX0j zlskU=&Hf7Sb)#>q8%_p#+PD!jM+3XFp19r4?4Gm!gqdc7H)7}KKd-%XUP2?P_h!*s zo8tM!FIlebr+z8{?@d@7V4Uh9_3q~0E%WX4Mo*%vDqje#x2)flub?N~2kHpdhr$V4 zU!m+TK*a)o2Uo7F-kaw{U#Y^5N%Ar_ZQSMJv{mku^SoYGKHDJ_Renei8+&y$z;DT| zr@ojj?{-E(Wx*3ksaN!EzyA6whNd&>3|@M#eedkcX|>W<-8jB3@E;*W%!76#mg)~5aU+mhL#c4#Je4VMAooIGr zg*gR}Sz@xZDJP~u%ZRj`Y^<#yd*?X%>FGr?Y~mJxQ2mXTdL!Z4t;GK5y}28$BdV-} z&kAqV$HtLFFV{Ex4ZiC*H>I zOXcO{?~krHc`W(+BM}Gf=HT+pm$6+4nnhlAM-!;?TGvQU#4UYl{MOOZd|y*RMq^~S z@x#4=n=8WSZ;PsGI^VeUhn`?p;cPeSVf#TTu6M}#@0(ka22T11&T*JzKAKy+=S88A zoJHCc2|l>JW_!3<5%y`2`<_{)N&8YypR5fRtiM3}kD$?m@9?AT_4EiEs! z@z^D_dyLa2#iI>|Mz@|jC3rtVZ^u#3gm;lFQ~S1}(}kRx#k;@`yAfPTU~j`!FA07} zN3HlBy>&>P+j8Z}aIP<(H7=Fa7y0lglD_z>?=Pyy(Eg=@VXU>-GXhgJn6t E1JVSZtpET3 literal 0 HcmV?d00001 diff --git a/Samples/auth/Outlook-Event-SSO-NAA/assets/icon-64.png b/Samples/auth/Outlook-Event-SSO-NAA/assets/icon-64.png new file mode 100644 index 0000000000000000000000000000000000000000..41051fce805b62ae4b779516cb29f9e36e1a9652 GIT binary patch literal 2112 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 literal 0 HcmV?d00001 diff --git a/Samples/auth/Outlook-Event-SSO-NAA/assets/sample.json b/Samples/auth/Outlook-Event-SSO-NAA/assets/sample.json new file mode 100644 index 000000000..4ce96574c --- /dev/null +++ b/Samples/auth/Outlook-Event-SSO-NAA/assets/sample.json @@ -0,0 +1,41 @@ +[ + { + "name": "outlook-event-sso-naa", + "reponame": "office-add-in-samples", + "source": "officedev", + "title": "Outlook event-based add-in using SSO with nested app authentication (preview)", + "shortDescription": "This sample shows how to implement SSO in an Outlook event-based add-in.", + "url": "https://github.com/OfficeDev/Office-Add-in-samples/tree/main/Samples/auth/Outlook-Add-in-SSO-NAA", + "longDescription": [ + "This sample shows how to implement SSO in an event in an Outlook add-in by using nested app authentication." + ], + "creationDateTime": "2024-08-21", + "updateDateTime": "2024-08-21", + "products": [ + "Office" + ], + "metadata": [ + { + "key": "CLIENT-SIDE-DEV", + "value": "JavaScript" + } + ], + "thumbnails": [ + + ], + "authors": [ + { + "gitHubAccount": "microsoft", + "pictureUrl": "https://github.com/microsoft.png", + "name": "Microsoft" + } + ], + "references": [ + { + "name": "Use SSO in events in an Outlook add-in using nested app authentication (preview)", + "description": "This sample shows how to implement SSO in an event in an Outlook add-in by using nested app authentication.", + "url": "https://learn.microsoft.com/office/dev/add-ins/develop/enable-nested-app-authentication-in-your-add-in" + } + ] + } + ] \ No newline at end of file diff --git a/Samples/auth/Outlook-Event-SSO-NAA/babel.config.json b/Samples/auth/Outlook-Event-SSO-NAA/babel.config.json new file mode 100644 index 000000000..8aa924d7c --- /dev/null +++ b/Samples/auth/Outlook-Event-SSO-NAA/babel.config.json @@ -0,0 +1,3 @@ +{ + "presets": ["@babel/preset-env"] +} \ No newline at end of file diff --git a/Samples/auth/Outlook-Event-SSO-NAA/manifest.xml b/Samples/auth/Outlook-Event-SSO-NAA/manifest.xml new file mode 100644 index 000000000..9cc2644da --- /dev/null +++ b/Samples/auth/Outlook-Event-SSO-NAA/manifest.xml @@ -0,0 +1,144 @@ + + + 16c028c6-f97d-4b09-96eb-3821219e0a47 + 1.0.0.0 + Contoso + en-US + + + + + + + https://www.contoso.com + + + + + + + + + + +
+ + + 250 + +
+
+ ReadWriteMailbox + + + + true + + + + + + + + + + + + + + + + + + + + + + +