有没有人知道如何使用ADAL从Angular调用Microsoft Graph的有效示例?

时间:2018-09-19 09:02:47

标签: angular microsoft-graph single-page-application adal adal.js

我已经遍历了所有示例,可以使用ADAL.js(不是msal)从最新的有角度版本调用Microsoft Graph,但是到目前为止还没有运气。那么有什么可行的例子吗?我发现的最新示例都是针对msal的-与azure广告应用无法升级到v2端点无关。

1 个答案:

答案 0 :(得分:2)

  

仅举一个例子供您参考:

     

https://gist.github.com/psignoret/50e88652ae5cb6cc157c09857e3ba87f

<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.11/js/adal.min.js"></script>
<script type="text/javascript">
            // Set up ADAL
            var authContext = new AuthenticationContext({
                clientId: '057e09f6-5d1a-43f9-abf5-451f20ab177f',
                postLogoutRedirectUri: 'http://bl.ocks.org/psignoret/raw/50e88652ae5cb6cc157c09857e3ba87f/'
            });
            // Make an AJAX request to the Microsoft Graph API and print the response as JSON.
            var getCurrentUser = function (access_token) {
                document.getElementById('api_response').textContent = 'Calling API...';
                var xhr = new XMLHttpRequest();
                xhr.open('GET', 'https://graph.microsoft.com/v1.0/me', true);
                xhr.setRequestHeader('Authorization', 'Bearer ' + access_token);
                xhr.onreadystatechange = function () {
                    if (xhr.readyState === 4 && xhr.status === 200) {
                        // Do something with the response
                        document.getElementById('api_response').textContent =
                            JSON.stringify(JSON.parse(xhr.responseText), null, '  ');
                    } else {
                        // TODO: Do something with the error (or non-200 responses)
                        document.getElementById('api_response').textContent =
                            'ERROR:\n\n' + xhr.responseText;
                    }
                };
                xhr.send();
            }
            if (authContext.isCallback(window.location.hash)) {
                // Handle redirect after token requests
                authContext.handleWindowCallback();
                var err = authContext.getLoginError();
                if (err) {
                    // TODO: Handle errors signing in and getting tokens
                    document.getElementById('api_response').textContent =
                        'ERROR:\n\n' + err;
                }
            } else {
                // If logged in, get access token and make an API request
                var user = authContext.getCachedUser();
                if (user) {
                    document.getElementById('username').textContent = 'Signed in as: ' + user.userName;
                    document.getElementById('api_response').textContent = 'Getting access token...';

                    // Get an access token to the Microsoft Graph API
                    authContext.acquireToken(
                        'https://graph.microsoft.com',
                        function (error, token) {
                            if (error || !token) {
                                // TODO: Handle error obtaining access token
                                document.getElementById('api_response').textContent =
                                    'ERROR:\n\n' + error;
                                return;
                            }
                            // Use the access token
                            getCurrentUser(token);
                        }
                    );
                } else {
                    document.getElementById('username').textContent = 'Not signed in.';
                }
            }
        </script>

这对于我这边的Firefox来说很好用。