CommunityToolkit / Graph-Controls

Set of Helpers and Controls for Windows development using the Microsoft Graph.
https://docs.microsoft.com/en-us/windows/communitytoolkit/graph/overview
Other
155 stars 39 forks source link

Add support for incremental consent via MsalProvider #147

Closed shweaver-MSFT closed 3 years ago

shweaver-MSFT commented 3 years ago

Fixes #8

PR Type

What kind of change does this PR introduce?

What is the current behavior?

MsalProvider does not currently support incremental consent. Requesting new scopes after the initial login will require the user to fully authenticate again.

In addition, the WithScopes parameter being passed in with the Graph requests is not being handled when the request is authenticated via MsalProvider.AuthenticateRequestAsync. The scopes are ignored currently and not used to actually make requests,

What is the new behavior?

With these changes, the MsalProvider will now use any specified alternate scopes with the graph request, and it will only ask for the user's password when consenting, instead of requiring full re-login.

I've also added a SemaphoreSlim to the MsalProvider and WindowsProvider to protect the provider from being bombarded with auth requests simultaneously, potentially causing throttling exceptions.

Lastly, I added a small fix to the PersonView to clear out PersonDetails and prevent stale data from showing up when one user logs out and another logs in.

PR Checklist

Please check if your PR fulfills the following requirements:

Other information

https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#incremental-and-dynamic-user-consent

ghost commented 3 years ago

Thanks shweaver-MSFT for opening a Pull Request! The reviewers will test the PR and highlight if there is any merge conflict or changes required. If the PR is approved we will proceed to merge the pull request 🙌