-
Notifications
You must be signed in to change notification settings - Fork 2.7k
ADFS Sample + E2E #1791
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
ADFS Sample + E2E #1791
Changes from 9 commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
6114764
Merge branch 'msal-core-adfs' of https://github.com/AzureAD/microsoft…
tnorling a283256
Add sample + E2E
tnorling afd59f0
Update testRunner and LabClient
tnorling 4a6d1d3
Merge branch 'msal-core-adfs' of https://github.com/AzureAD/microsoft…
tnorling 85a990a
Add readme to sample
tnorling c8c7a1e
Update server port
tnorling ab12b92
Update samples/VanillaJSTestApp/app/adfs/Readme.md
tnorling 88c9132
Addressing feedback
tnorling 6a962d5
Merge branch 'adfs-sample' of https://github.com/AzureAD/microsoft-au…
tnorling cefd4ca
Merge branch '1.4.0-release' of https://github.com/AzureAD/microsoft-…
tnorling 3782c0b
Update test
tnorling 364621d
Update samples/VanillaJSTestApp/app/adfs/Readme.md
tnorling 4fcdb41
Update welcome message
tnorling f5378d3
Merge branch 'adfs-sample' of https://github.com/AzureAD/microsoft-au…
tnorling c4fc53c
Add federationProvider to LabClient
tnorling File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| # ADFS Support | ||
|
|
||
| MSAL.js supports connecting to Azure AD, which signs in managed-users (users managed in Azure AD) or federated users (users managed by another identity provider such as ADFS). MSAL.js does not differentiate between these two types of users. As far as it’s concerned, it talks to Azure AD. The authority that you would pass in this case is the normal Azure AD Authority: `https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}` | ||
|
|
||
| MSAL.js also supports directly connecting to ADFS 2019, which is Open ID Connect compliant and has support for scopes and PKCE. This support requires that a service pack [KB 4490481](https://support.microsoft.com/en-us/help/4490481/windows-10-update-kb4490481) is applied to Windows Server. When connecting directly to ADFS, the authority you'll want to use to build your application will be of form `https://mysite.contoso.com/adfs/` | ||
|
|
||
| Currently, there are no plans to support a direct connection to ADFS 16 or ADFS v2. ADFS 16 does not support scopes, and ADFS v2 is not OIDC compliant. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,93 @@ | ||
| // Browser check variables | ||
| // If you support IE, our recommendation is that you sign-in using Redirect APIs | ||
| // If you as a developer are testing using Edge InPrivate mode, please add "isEdge" to the if check | ||
| const ua = window.navigator.userAgent; | ||
| const msie = ua.indexOf("MSIE "); | ||
| const msie11 = ua.indexOf("Trident/"); | ||
| const msedge = ua.indexOf("Edge/"); | ||
| const isIE = msie > 0 || msie11 > 0; | ||
| const isEdge = msedge > 0; | ||
|
|
||
| let signInType; | ||
|
|
||
| // Create the main myMSALObj instance | ||
| // configuration parameters are located at authConfig.js | ||
| const myMSALObj = new Msal.UserAgentApplication(msalConfig); | ||
|
|
||
| // Register Callbacks for Redirect flow | ||
| myMSALObj.handleRedirectCallback(authRedirectCallBack); | ||
|
|
||
| function authRedirectCallBack(error, response) { | ||
| if (error) { | ||
| console.log(error); | ||
| } else { | ||
| if (response.tokenType === "id_token" && myMSALObj.getAccount() && !myMSALObj.isCallback(window.location.hash)) { | ||
| console.log('id_token acquired at: ' + new Date().toString()); | ||
| showWelcomeMessage(myMSALObj.getAccount()); | ||
| } else if (response.tokenType === "access_token") { | ||
| console.log('access_token acquired at: ' + new Date().toString()); | ||
| updateUI(response); | ||
| accessTokenButtonPopup.style.display = 'none'; | ||
| accessTokenButtonRedirect.style.display = 'none'; | ||
| } else { | ||
| console.log("token type is:" + response.tokenType); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| // Redirect: once login is successful and redirects with tokens, call Graph API | ||
| if (myMSALObj.getAccount() && !myMSALObj.isCallback(window.location.hash)) { | ||
| // avoid duplicate code execution on page load in case of iframe and Popup window. | ||
| showWelcomeMessage(myMSALObj.getAccount()); | ||
| } | ||
|
|
||
| function signIn(method) { | ||
| signInType = isIE ? "loginRedirect" : method; | ||
| if (signInType === "loginPopup") { | ||
| myMSALObj.loginPopup(loginRequest) | ||
| .then(loginResponse => { | ||
| console.log(loginResponse); | ||
| if (myMSALObj.getAccount()) { | ||
| showWelcomeMessage(myMSALObj.getAccount()); | ||
| } | ||
| }).catch(function (error) { | ||
| console.log(error); | ||
| }); | ||
| } else if (signInType === "loginRedirect") { | ||
| myMSALObj.loginRedirect(loginRequest) | ||
| } | ||
| } | ||
|
|
||
| function signOut() { | ||
| myMSALObj.logout(); | ||
| } | ||
|
|
||
| function getAccessTokenPopup() { | ||
| if (myMSALObj.getAccount()) { | ||
| myMSALObj.acquireTokenPopup(loginRequest).then(response => { | ||
| updateUI(response); | ||
| accessTokenButtonPopup.style.display = 'none'; | ||
| accessTokenButtonRedirect.style.display = 'none'; | ||
| }).catch(error => { | ||
| console.log(error); | ||
| }); | ||
| } | ||
| } | ||
|
|
||
| function getAccessTokenRedirect() { | ||
| if (myMSALObj.getAccount()) { | ||
| myMSALObj.acquireTokenRedirect(loginRequest); | ||
| } | ||
| } | ||
|
|
||
| function getAccessTokenSilent() { | ||
| if (myMSALObj.getAccount()) { | ||
| myMSALObj.acquireTokenSilent(loginRequest).then(response => { | ||
| updateUI(response); | ||
| accessTokenButtonPopup.style.display = 'none'; | ||
| accessTokenButtonRedirect.style.display = 'none'; | ||
| }).catch(error => { | ||
| console.log(error); | ||
| }) | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| // Config object to be passed to Msal on creation | ||
| const msalConfig = { | ||
| auth: { | ||
| clientId: "57448aa1-9515-4176-a106-5cb9be8550e1", | ||
| authority: "https://fs.msidlab8.com/adfs/", | ||
| knownAuthorities: ["fs.msidlab8.com"] | ||
| }, | ||
| cache: { | ||
| cacheLocation: "localStorage", // This configures where your cache will be stored | ||
| storeAuthStateInCookie: false, // Set this to "true" if you are having issues on IE11 or Edge | ||
| } | ||
| }; | ||
|
|
||
| // Add here scopes for id token to be used at MS Identity Platform endpoints. | ||
| const loginRequest = { | ||
| scopes: ["openid", "profile"], | ||
| forceRefresh: false // Set this to "true" to skip a cached token and go to the server to get a new token | ||
| }; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,73 @@ | ||
| <!DOCTYPE html> | ||
| <html lang="en"> | ||
| <head> | ||
| <meta charset="UTF-8"> | ||
| <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> | ||
| <title>Quickstart | MSAL.JS with ADFS 2019 Vanilla JavaScript SPA</title> | ||
|
|
||
| <!-- IE support: add promises polyfill before msal.js --> | ||
| <script type="text/javascript" src="//cdn.jsdelivr.net/npm/[email protected]/js/browser/bluebird.min.js"></script> | ||
| <script src="./dist/msal.js"></script> | ||
|
|
||
| <!-- adding Bootstrap 4 for UI components --> | ||
| <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> | ||
| </head> | ||
| <body> | ||
| <nav class="navbar navbar-expand-lg navbar-dark bg-primary"> | ||
| <a class="navbar-brand" href="/">MS Identity Platform</a> | ||
| <div class="btn-group ml-auto dropleft"> | ||
| <button type="button" id="SignIn" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
| Sign In | ||
| </button> | ||
| <div class="dropdown-menu"> | ||
| <button class="dropdown-item" id="loginPopup" onclick="signIn(this.id)">Sign in using Popup</button> | ||
| <button class="dropdown-item" id="loginRedirect" onclick="signIn(this.id)">Sign in using Redirect</button> | ||
| </div> | ||
| </div> | ||
| </nav> | ||
| <br> | ||
| <h5 class="card-header text-center">Vanilla JavaScript SPA calling MS Graph API with MSAL.JS</h5> | ||
| <br> | ||
| <div class="row" style="margin:auto" > | ||
| <div id="card-div" class="col-md-3" style="display:none"> | ||
| <div class="card text-center"> | ||
| <div class="card-body"> | ||
| <h5 class="card-title" id="WelcomeMessage">Please sign-in to see your profile and read your mails</h5> | ||
tnorling marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| <div id="profile-div"></div> | ||
| <br> | ||
| <br> | ||
| <button class="btn btn-primary" id="getAccessTokenRedirect" onclick="getAccessTokenRedirect()">Get Access Token (Redirect)</button> | ||
| <br> | ||
| <br> | ||
| <button class="btn btn-primary" id="getAccessTokenPopup" onclick="getAccessTokenPopup()">Get Access Token (Popup)</button> | ||
| <br> | ||
| <br> | ||
| <button class="btn btn-primary" id="getAccessTokenSilent" onclick="getAccessTokenSilent()">Get Access Token (Silent)</button> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <br> | ||
| <br> | ||
| <div class="col-md-4"> | ||
| <div class="list-group" id="list-tab" role="tablist"> | ||
| </div> | ||
| </div> | ||
| <div class="col-md-5"> | ||
| <div class="tab-content" id="nav-tabContent"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <br> | ||
| <br> | ||
|
|
||
| <!-- importing bootstrap.js and supporting js libraries --> | ||
| <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script> | ||
| <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> | ||
| <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script> | ||
|
|
||
| <!-- importing app scripts | load order is important --> | ||
| <script type="text/javascript" src="./authConfig.js"></script> | ||
| <script type="text/javascript" src="./ui.js"></script> | ||
| <script type="text/javascript" src="./auth.js"></script> | ||
| </body> | ||
| </html> | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.