{"id":3421,"date":"2018-09-27T08:44:46","date_gmt":"2018-09-27T13:44:46","guid":{"rendered":"http:\/\/lisa.rushworth.us\/?p=3421"},"modified":"2018-09-27T08:48:43","modified_gmt":"2018-09-27T13:48:43","slug":"using-microsoft-graph","status":"publish","type":"post","link":"https:\/\/www.rushworth.us\/lisa\/?p=3421","title":{"rendered":"Using Microsoft Graph"},"content":{"rendered":"<p><strong>Single Sign-On: Microsoft Graph<\/strong><\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"162\"><strong>End Result:<\/strong><\/td>\n<td width=\"462\">This will allow in-domain computers to automatically log in to web sites and applications. Computers not currently logged into the company domain will, when they do not have an active authenticated session, be presented with Microsoft\u2019s authentication page.<\/td>\n<\/tr>\n<tr>\n<td width=\"162\"><strong>Requirements:<\/strong><\/td>\n<td width=\"462\">The application must be registered on Microsoft Graph.<\/p>\n<p>Beyond that, requirements are language specific \u2013 I will be demonstrating a pre-built Python example here because it is simple and straight-forward. There are examples for a plethora of other languages available at <a href=\"https:\/\/github.com\/microsoftgraph\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/microsoftgraph<\/a><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" width=\"623\"><strong>Process \u2013 Application Development:<\/strong><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" width=\"623\"><em>Application Registration<\/em><\/p>\n<p>To register your application, go to the Application Registration Portal (<a href=\"https:\/\/apps.dev.microsoft.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/apps.dev.microsoft.com\/<\/a>). Elect to sign in with your company credentials.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3422\" rel=\"attachment wp-att-3422\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3422\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph01.png\" alt=\"\" width=\"622\" height=\"546\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph01.png 622w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph01-300x263.png 300w\" sizes=\"auto, (max-width: 622px) 100vw, 622px\" \/><\/a><\/p>\n<p>You will be redirected to the company&#8217;s authentication page<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3423\" rel=\"attachment wp-att-3423\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3423\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph02.png\" alt=\"\" width=\"663\" height=\"567\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph02.png 663w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph02-300x257.png 300w\" sizes=\"auto, (max-width: 663px) 100vw, 663px\" \/><\/a><\/p>\n<p>If ADSF finds a valid token for you, you will be directed to the application registration portal. Otherwise you\u2019ll get the same logon page you see for many other MS cloud-hosted apps. Once you have authenticated, click \u201cAdd an app\u201d in the upper right-hand corner of the page.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3424\" rel=\"attachment wp-att-3424\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3424\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph03-1024x233.png\" alt=\"\" width=\"960\" height=\"218\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph03-1024x233.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph03-300x68.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph03-768x175.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph03.png 1548w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Provide a descriptive name for the application and click \u201cCreate\u201d<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3425\" rel=\"attachment wp-att-3425\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3425\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph04.png\" alt=\"\" width=\"745\" height=\"571\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph04.png 745w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph04-300x230.png 300w\" sizes=\"auto, (max-width: 745px) 100vw, 745px\" \/><\/a><\/p>\n<p>Click \u201cGenerate New Password\u201d to generate a new application secret. Copy it into a temporary document. Copy the \u201cApplication Id\u201d into the same temporary document.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3426\" rel=\"attachment wp-att-3426\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3426\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph05-1024x527.png\" alt=\"\" width=\"960\" height=\"494\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph05-1024x527.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph05-300x154.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph05-768x395.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph05.png 1533w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Click \u201cAdd Platform\u201d and select \u201cWeb\u201d<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3427\" rel=\"attachment wp-att-3427\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3427\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph06-1024x485.png\" alt=\"\" width=\"960\" height=\"455\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph06-1024x485.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph06-300x142.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph06-768x364.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph06.png 1324w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Enter the appropriate redirect\/logout URLs (this will be application specific \u2013 in the pre-built examples, the post-authentication redirect URL is http:\/\/localhost:5000\/login\/authorized<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3428\" rel=\"attachment wp-att-3428\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3428\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph07.png\" alt=\"\" width=\"794\" height=\"521\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph07.png 794w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph07-300x197.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph07-768x504.png 768w\" sizes=\"auto, (max-width: 794px) 100vw, 794px\" \/><\/a><\/p>\n<p>Delegated permissions impersonate the signed in user, application permissions use the application\u2019s credentials to perform actions. I use delegated permissions, although there are use cases where application permissions would be appropriate (batch jobs, for instance).<\/p>\n<p>Add any permissions your app requires \u2013 for simple authentication, the default delegated permission \u201cUser.Read\u201d is sufficient. If you want to perform additional actions \u2013 write files, send mail, etc \u2013 then you will need to click \u201cAdd\u201d and select the extra permissions.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3429\" rel=\"attachment wp-att-3429\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3429\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph08.png\" alt=\"\" width=\"973\" height=\"373\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph08.png 973w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph08-300x115.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph08-768x294.png 768w\" sizes=\"auto, (max-width: 973px) 100vw, 973px\" \/><\/a><\/p>\n<p>Profile information does not need to be entered, but I have entered the \u201cHome page URL\u201d for all of my applications so I am confident that I know which registered app corresponds with which deployed application (i.e. eighteen months from now, I can still figure out site is using the registered \u201cADSF Graph Sample\u201d app and don\u2019t accidentally delete it when it is still in use).<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3430\" rel=\"attachment wp-att-3430\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3430\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph09.png\" alt=\"\" width=\"703\" height=\"666\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph09.png 703w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph09-300x284.png 300w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><\/a><\/p>\n<p>Click Save. You can return to your \u201cMy Applications\u201d listing to verify the app was created successfully.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3431\" rel=\"attachment wp-att-3431\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3431\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph10-1024x244.png\" alt=\"\" width=\"960\" height=\"229\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph10-1024x244.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph10-300x72.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph10-768x183.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph10.png 1569w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p><em>Application Implementation:<\/em><\/p>\n<p>To use an example app from Microsoft\u2019s repository, clone it.<\/p>\n<p>git clone <a href=\"https:\/\/github.com\/microsoftgraph\/python-sample-auth.git\">https:\/\/github.com\/microsoftgraph\/python-sample-auth.git<\/a><\/p>\n<p>Edit the config.py file and update the \u201cCLIENT_ID\u201d variable with your Application Id and update the \u201cCLIENT_SECRET\u201d variable with your Application Secret password. (As they note, in a production implementation you would hash this out and store it somewhere else, not just drop it in clear text in your code \u2026 also if you publish a screen shot of your app ID &amp; secret somewhere, generate a new password or delete the app registration and create a new one. Which is to say, do not retype the info in my example, I\u2019ve already deleted the registration used herein.)<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3432\" rel=\"attachment wp-att-3432\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3432\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph11.png\" alt=\"\" width=\"1006\" height=\"637\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph11.png 1006w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph11-300x190.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph11-768x486.png 768w\" sizes=\"auto, (max-width: 1006px) 100vw, 1006px\" \/><\/a><\/p>\n<p>Install the prerequisites using \u201cpip install -r requirements.txt\u201d<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3433\" rel=\"attachment wp-att-3433\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3433\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph12.png\" alt=\"\" width=\"624\" height=\"312\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph12.png 624w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph12-300x150.png 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/a><\/p>\n<p>Then run the application \u2013 in the authentication example, there are multiple web applications that use different interfaces. I am running \u201cpython sample_flask.py\u201d<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3434\" rel=\"attachment wp-att-3434\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3434\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph13.png\" alt=\"\" width=\"624\" height=\"312\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph13.png 624w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph13-300x150.png 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/a><\/p>\n<p>Once it is running, access your site at <a href=\"http:\/\/localhost:5000\">http:\/\/localhost:5000<\/a><\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3435\" rel=\"attachment wp-att-3435\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3435\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph14.png\" alt=\"\" width=\"624\" height=\"312\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph14.png 624w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph14-300x150.png 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/a><\/p>\n<p>The initial page will load; click on \u201cConnect\u201d<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3437\" rel=\"attachment wp-att-3437\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3437\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph15.png\" alt=\"\" width=\"978\" height=\"569\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph15.png 978w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph15-300x175.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph15-768x447.png 768w\" sizes=\"auto, (max-width: 978px) 100vw, 978px\" \/><\/a><\/p>\n<p>Enter your company user ID and click \u201cNext\u201d<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3422\" rel=\"attachment wp-att-3422\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3422\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph01.png\" alt=\"\" width=\"622\" height=\"546\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph01.png 622w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph01-300x263.png 300w\" sizes=\"auto, (max-width: 622px) 100vw, 622px\" \/><\/a><\/p>\n<p>This will redirect to the company\u2019s sign-on page. For in-domain computers or computers that have already authenticated to ADSF, you won\u2019t have to enter credentials. Otherwise, you\u2019ll be asked to logon (and possibly perform the two-factor authentication verification).<\/p>\n<p>Voila, the user is authenticated and you\u2019ve got access to some basic directory info about the individual.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3438\" rel=\"attachment wp-att-3438\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3438\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph16-1024x379.png\" alt=\"\" width=\"960\" height=\"355\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph16-1024x379.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph16-300x111.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph16-768x284.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph16.png 1493w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" width=\"623\"><strong>Process \u2013 Tenant Owner:<\/strong><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" width=\"623\">None! Any valid user within the tenant is able to register applications.<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" width=\"623\"><strong>Implementation Recommendations:<\/strong><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" width=\"623\">There is currently no way to backup\/restore applications. If an application is accidentally or maliciously deleted, a new application will need to be registered. The application&#8217;s code will need to be updated with a new ID and secret. Documenting the options selected when registering the application will ensure the application can be re-registered quickly and without guessing values such as the callback URL.<\/p>\n<p>There is currently no way to assign ownership of orphaned applications. If the owner&#8217;s account is terminated, no one can manage the application. The application continues to function, so it may be some time before anyone <em>realizes<\/em> the application is orphaned. For some period of time after the account is disabled, it may remain in the directory &#8212; which means a directory administrator could re-enable the account and set the password to a known value. Someone could then log into the Microsoft App Registration Portal under that ID and add new owners. Even if the ID has been deleted from the directory, it exists as a tombstone and can be restored for some period of time. Eventually, though, the account ceases to exist &#8212; at which time the only option would be to register a new app under someone else&#8217;s ID and change the code to use the new ID and secret. Ensure multiple individuals are listed as the application owner helps avoid orphaned applications.<\/p>\n<p>Edit the application and click the \u201cAdd Owner\u201d button.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3439\" rel=\"attachment wp-att-3439\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3439\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph17.png\" alt=\"\" width=\"803\" height=\"217\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph17.png 803w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph17-300x81.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph17-768x208.png 768w\" sizes=\"auto, (max-width: 803px) 100vw, 803px\" \/><\/a><\/p>\n<p>You can enter the person\u2019s logon ID or their name in \u201clast, first\u201d format. You <em>can<\/em> enter their first name \u2013 with a unique first name, that may work. Enter \u201cRobert\u201d and you\u2019re in for a lot of scrolling! Once you find the person, click \u201cAdd\u201d to set them up as an owner of the application. Click \u201cSave\u201d at the bottom of the page to commit this change.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3440\" rel=\"attachment wp-att-3440\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3440\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph18.png\" alt=\"\" width=\"803\" height=\"252\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph18.png 803w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph18-300x94.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph18-768x241.png 768w\" sizes=\"auto, (max-width: 803px) 100vw, 803px\" \/><\/a><\/p>\n<p>I have submitted a feature request to Microsoft both for <a href=\"https:\/\/feedback.azure.com\/forums\/169401-azure-active-directory\/suggestions\/35536465-administrative-control-of-apps-registered-to-micro\" target=\"_blank\" rel=\"noopener\">reassigning orphaned applications within your tenant and for a mechanism to restore deleted applications<\/a> &#8212; apparently their feature requests have a voting process, so it would be helpful if people would up-vote my feature request.<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" width=\"623\"><strong>Ongoing Maintenance:<\/strong><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" width=\"623\">There is little ongoing maintenance \u2013 once the application is registered, it\u2019s done.<\/p>\n<p><em>Updating The Secret:<\/em><\/p>\n<p>You <em>can<\/em> change the application secret via the web portal \u2013 this would be a good step to take when an individual has left the team, and can be done as a proactive security step as a routine. Within the application, select \u201cGenerate New Password\u201d and create a new secret. Update your code with the new secret, verify it works (roll-back is to restore the old secret to the config \u2013 it\u2019s still in the web portal and works). Once the application is verified to work with the new secret, click \u201cDelete\u201d next to the old one. Both the create time and first three characters of the secret are displayed on the site to ensure the proper one is removed.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3441\" rel=\"attachment wp-att-3441\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3441\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph20-1024x210.png\" alt=\"\" width=\"960\" height=\"197\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph20-1024x210.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph20-300x62.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph20-768x158.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph20.png 1198w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p><em>Maintaining Application Owners:<\/em><\/p>\n<p>Any application owner can <em>remove<\/em> other owners \u2013 were I to move to a different team, the owners I delegated could revoke my access. Just click the \u201cX\u201d to the far right of the owner you wish to remove.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3442\" rel=\"attachment wp-att-3442\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3442\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/09\/MSGraph21.png\" alt=\"\" width=\"803\" height=\"252\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph21.png 803w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph21-300x94.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/09\/MSGraph21-768x241.png 768w\" sizes=\"auto, (max-width: 803px) 100vw, 803px\" \/><\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Single Sign-On: Microsoft Graph End Result: This will allow in-domain computers to automatically log in to web sites and applications. Computers not currently logged into the company domain will, when they do not have an active authenticated session, be presented with Microsoft\u2019s authentication page. Requirements: The application must be registered on Microsoft Graph. Beyond that, &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33,29],"tags":[663,661,662],"class_list":["post-3421","post","type-post","status-publish","format-standard","hentry","category-coding","category-technology","tag-azure-ad","tag-graph","tag-graph-api"],"_links":{"self":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/3421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3421"}],"version-history":[{"count":2,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/3421\/revisions"}],"predecessor-version":[{"id":3444,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/3421\/revisions\/3444"}],"wp:attachment":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}