Example #1
0
        /// <summary>
        /// Checks that an Exchange client is available to the client.
        /// </summary>
        /// <returns>The Exchange Online client.</returns>
        public static async Task<ExchangeClient> EnsureCalendarClientCreatedAsync()
        {
            try
            {
                if (_discoveryContext == null)
                {
                    _discoveryContext = await DiscoveryContext.CreateAsync();
                }

                var dcr = await _discoveryContext.DiscoverResourceAsync(ExchangeServiceResourceId);

                _loggedInUser = dcr.UserId;

                return new ExchangeClient(ExchangeServiceEndpointUri, async () =>
                {
                    return (await _discoveryContext.AuthenticationContext.AcquireTokenSilentAsync(ExchangeServiceResourceId, _discoveryContext.AppIdentity.ClientId, new Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifier(dcr.UserId, Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifierType.UniqueId))).AccessToken;
                });

            }
            catch (AuthenticationFailedException ex)
            {
                string errorText = String.Format(
                    "{0}, code {1}.  EnsureCalendarClientCreatedAsync - failed",
                    ex.ErrorDescription,
                    ex.ErrorCode);

                LoggingViewModel.Instance.Information = errorText;
            }

            return null;
        }
Example #2
0
        public static async Task <GraphServiceClient> EnsureClientCreated()
        {
            if (_discoveryContext == null)
            {
                _discoveryContext = await DiscoveryContext.CreateAsync();
            }

            var dcr = await _discoveryContext.DiscoverResourceAsync(GraphResourceId);

            _lastLoggedInUser = dcr.UserId;

            var clientCredential = new ClientCredential(_discoveryContext.AppIdentity.ClientId, _discoveryContext.AppIdentity.ClientSecret);
            var authResult       = await _discoveryContext
                                   .AuthenticationContext
                                   .AcquireTokenByRefreshTokenAsync(new SessionCache().Read("RefreshToken"), clientCredential, GraphResourceId);

            var graphToken             = authResult.AccessToken;
            var authenticationProvider = new DelegateAuthenticationProvider(
                (requestMessage) =>
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", graphToken);
                return(Task.FromResult(0));
            });

            return(new GraphServiceClient(authenticationProvider));
        }
Example #3
0
        private async Task <ExchangeClient> EnsureClientCreated()
        {
            DiscoveryContext disco = GetFromCache("DiscoveryContext") as DiscoveryContext;

            if (disco == null)
            {
                disco = await DiscoveryContext.CreateAsync();

                SaveInCache("DiscoveryContext", disco);
            }

            string ServiceResourceId  = "https://outlook.office365.com";
            Uri    ServiceEndpointUri = new Uri("https://outlook.office365.com/ews/odata");

            var dcr = await disco.DiscoverResourceAsync(ServiceResourceId);

            SaveInCache("LastLoggedInUser", dcr.UserId);

            return(new ExchangeClient(ServiceEndpointUri, async() => {
                return (await disco.AuthenticationContext.AcquireTokenByRefreshTokenAsync(
                            new SessionCache().Read("RefreshToken"),
                            new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential(
                                disco.AppIdentity.ClientId,
                                disco.AppIdentity.ClientSecret),
                            ServiceResourceId)).AccessToken;
            }));
        }
Example #4
0
        private async Task <SharePointClient> EnsureClientCreated()
        {
            DiscoveryContext disco = GetFromCache("DiscoveryContext") as DiscoveryContext;

            if (disco == null)
            {
                disco = await DiscoveryContext.CreateAsync();

                SaveInCache("DiscoveryContext", disco);
            }

            var dcr = await disco.DiscoverCapabilityAsync(MyFilesCapability);

            var ServiceResourceId  = dcr.ServiceResourceId;
            var ServiceEndpointUri = dcr.ServiceEndpointUri;

            SaveInCache("LastLoggedInUser", dcr.UserId);

            return(new SharePointClient(ServiceEndpointUri, async() =>
            {
                Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential creds =
                    new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential(
                        disco.AppIdentity.ClientId, disco.AppIdentity.ClientSecret);

                return (await disco.AuthenticationContext.AcquireTokenSilentAsync(
                            ServiceResourceId,
                            creds,
                            new UserIdentifier(dcr.UserId, UserIdentifierType.UniqueId))).AccessToken;
            }));
        }
Example #5
0
        public static async Task <SharePointClient> EnsureClientCreated()
        {
            if (_discoveryContext == null)
            {
                _discoveryContext = await DiscoveryContext.CreateAsync();
            }

            ResourceDiscoveryResult dcr = null;

            try
            {
                dcr = await _discoveryContext.DiscoverResourceAsync(ServiceResourceId);
            }
            catch (AuthenticationFailedException)
            {
                // If the user go back in the login page an Authentication exception is launched.
                return(null);
            }

            _lastLoggedInUser = dcr.UserId;

            return(new SharePointClient(ServiceEndpointUri, async() =>
            {
                return (await _discoveryContext.AuthenticationContext
                        .AcquireTokenSilentAsync(ServiceResourceId, _discoveryContext.AppIdentity.ClientId, new Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifier(dcr.UserId, Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifierType.UniqueId))).AccessToken;
            }));
        }
        private async Task <SharePointClient> EnsureClientCreated()
        {
            DiscoveryContext disco = GetFromCache("DiscoveryContext") as DiscoveryContext;

            if (disco == null)
            {
                disco = await DiscoveryContext.CreateAsync();

                SaveInCache("DiscoveryContext", disco);
            }

            var dcr = await disco.DiscoverCapabilityAsync("MyFiles");

            var ServiceResourceId  = dcr.ServiceResourceId;
            var ServiceEndpointUri = dcr.ServiceEndpointUri;

            SaveInCache("LastLoggedInUser", dcr.UserId);

            return(new SharePointClient(ServiceEndpointUri, async() =>
            {
                return (await disco.AuthenticationContext.AcquireTokenByRefreshTokenAsync(
                            new SessionCache().Read("RefreshToken"),
                            new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential(
                                disco.AppIdentity.ClientId,
                                disco.AppIdentity.ClientSecret),
                            ServiceResourceId)).AccessToken;
            }));
        }
Example #7
0
        public async Task <ActionResult> Index(string authType)
        {
            if (authType == "O365")
            {
                try
                {
                    if (_discoveryContext == null)
                    {
                        _discoveryContext = await DiscoveryContext.CreateAsync();
                    }
                    var dcr = await _discoveryContext.DiscoverResourceAsync(ServiceResourceId);

                    _lastLoggedInUser = dcr.UserId;
                    string accessToken = (await _discoveryContext.AuthenticationContext.AcquireTokenByRefreshTokenAsync(new SessionCache().Read("RefreshToken"), new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential(_discoveryContext.AppIdentity.ClientId, _discoveryContext.AppIdentity.ClientSecret), ServiceResourceId)).AccessToken;

                    OAuthController.SaveAccessTokenInCache(ServiceResourceId, accessToken, DateTime.Now.AddMinutes(10).ToString());
                    return(new RedirectResult("/Home/App"));
                }
                catch (RedirectRequiredException ex)
                {
                    return(Redirect(ex.RedirectUri.ToString()));
                }
            }
            else
            {
                string redirectUri      = this.Request.Url.GetLeftPart(UriPartial.Authority).ToString() + "/Home/App";
                string authorizationUrl = OAuthController.GetAuthorizationUrl(ServiceResourceId, new Uri(redirectUri));
                return(new RedirectResult(authorizationUrl));
            }
        }
Example #8
0
        public static async Task <CapabilityDiscoveryResult> DiscoverMail()
        {
            if (_discoveryContext == null)
            {
                _discoveryContext = await DiscoveryContext.CreateAsync();
            }

            var dcr = await _discoveryContext.DiscoverCapabilityAsync("Mail");

            return(dcr);
        }
Example #9
0
        public async Task <ActionResult> O365API()
        {
            if (_discoveryContext == null)
            {
                _discoveryContext = await DiscoveryContext.CreateAsync();
            }
            var dcr = await _discoveryContext.DiscoverResourceAsync(ServiceResourceId);

            _lastLoggedInUser = dcr.UserId;
            string accessToken = (await _discoveryContext.AuthenticationContext.AcquireTokenByRefreshTokenAsync(new SessionCache().Read("RefreshToken"), new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential(_discoveryContext.AppIdentity.ClientId, _discoveryContext.AppIdentity.ClientSecret), ServiceResourceId)).AccessToken;

            OAuthController.SaveAccessTokenInCache(ServiceResourceId, accessToken, DateTime.Now.AddMinutes(10).ToString());
            return(new RedirectResult("/Home/App"));
        }
Example #10
0
        public static async Task SignOut()
        {
            if (string.IsNullOrEmpty(_lastLoggedInUser))
            {
                return;
            }

            if (_discoveryContext == null)
            {
                _discoveryContext = await DiscoveryContext.CreateAsync();
            }

            await _discoveryContext.LogoutAsync(_lastLoggedInUser);
        }
Example #11
0
        public static async Task <ExchangeClient> EnsureClientCreated()
        {
            if (_discoveryContext == null)
            {
                _discoveryContext = await DiscoveryContext.CreateAsync();
            }

            var dcr = await _discoveryContext.DiscoverResourceAsync(ServiceResourceId);

            _lastLoggedInUser = dcr.UserId;

            return(new ExchangeClient(ServiceEndpointUri, async() =>
            {
                return (await _discoveryContext.AuthenticationContext.AcquireTokenSilentAsync(ServiceResourceId, _discoveryContext.AppIdentity.ClientId, new Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifier(dcr.UserId, Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifierType.UniqueId))).AccessToken;
            }));
        }
Example #12
0
        //private static async Task<SharePointClient> EnsureClientCreated(string siteUrl)
        //{
        //    Authenticator authenticator = new Authenticator();
        //    var authInfo = await authenticator.AuthenticateAsync(SharePointResourceId, ServiceIdentifierKind.Resource);

        //    // Create the SharePoint client proxy:
        //    return new SharePointClient(new Uri(string.Format("{0}/_api", siteUrl)), authInfo.GetAccessToken);
        //}

        public static async Task <SharePointClient> EnsureClientCreated(string siteUrl)
        {
            if (_discoveryContext == null)
            {
                _discoveryContext = await DiscoveryContext.CreateAsync();
            }

            var dcr = await _discoveryContext.DiscoverResourceAsync(ServiceResourceId);

            _lastLoggedInUser = dcr.UserId;

            return(new SharePointClient(new Uri(string.Format("{0}/_api", siteUrl)), async() =>
            {
                return (await _discoveryContext.AuthenticationContext.AcquireTokenSilentAsync(ServiceResourceId, _discoveryContext.AppIdentity.ClientId, new Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifier(dcr.UserId, Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifierType.UniqueId))).AccessToken;
            }));
        }
        public static async Task <SharePointClient> EnsureClientCreated()
        {
            if (_discoveryContext == null)
            {
                _discoveryContext = await DiscoveryContext.CreateAsync();
            }

            var dcr = await _discoveryContext.DiscoverResourceAsync(ServiceResourceId);

            _lastLoggedInUser = dcr.UserId;

            return(new SharePointClient(ServiceEndpointUri, async() =>
            {
                return (await _discoveryContext.AuthenticationContext.AcquireTokenByRefreshTokenAsync(new SessionCache().Read("RefreshToken"), new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential(_discoveryContext.AppIdentity.ClientId, _discoveryContext.AppIdentity.ClientSecret), ServiceResourceId)).AccessToken;
            }));
        }
Example #14
0
        public static async Task <ExchangeClient> EnsureClientCreated()
        {
            DiscoveryContext _discoveryContext = System.Web.HttpContext.Current.Session["DiscoveryContext"] as DiscoveryContext;

            if (_discoveryContext == null)
            {
                _discoveryContext = await DiscoveryContext.CreateAsync();

                System.Web.HttpContext.Current.Session["DiscoveryContext"] = _discoveryContext;
            }

            var dcr = await _discoveryContext.DiscoverResourceAsync(ServiceResourceId);

            System.Web.HttpContext.Current.Session["LastLoggedInUser"] = dcr.UserId;

            return(new ExchangeClient(ServiceEndpointUri, async() => {
                return (await _discoveryContext.AuthenticationContext.AcquireTokenByRefreshTokenAsync(new SessionCache().Read("RefreshToken"), new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential(_discoveryContext.AppIdentity.ClientId, _discoveryContext.AppIdentity.ClientSecret), ServiceResourceId)).AccessToken;
            }));
        }
Example #15
0
        public static async Task <SharePointClient> EnsureClientCreated()
        {
            if (_discoveryContext == null)
            {
                _discoveryContext = await DiscoveryContext.CreateAsync();
            }

            var dcr = await _discoveryContext.DiscoverCapabilityAsync(MyFilesCapability);

            var ServiceResourceId  = dcr.ServiceResourceId;
            var ServiceEndpointUri = dcr.ServiceEndpointUri;

            _lastLoggedInUser = dcr.UserId;

            // Create the MyFiles client proxy:
            return(new SharePointClient(ServiceEndpointUri, async() =>
            {
                return (await _discoveryContext.AuthenticationContext.AcquireTokenSilentAsync(ServiceResourceId, _discoveryContext.AppIdentity.ClientId, new Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifier(dcr.UserId, Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifierType.UniqueId))).AccessToken;
            }));
        }
        protected async Task <string> GetAccessToken()
        {
            DiscoveryContext disco = GetFromCache("DiscoveryContext") as DiscoveryContext;

            if (disco == null)
            {
                disco = await DiscoveryContext.CreateAsync();

                SaveInCache("DiscoveryContext", disco);
            }

            var dcr = await disco.DiscoverResourceAsync(ServiceResourceId);

            SaveInCache("LastLoggedInUser", dcr.UserId);

            return((await disco.AuthenticationContext.AcquireTokenByRefreshTokenAsync(
                        new SessionCache().Read("RefreshToken"),
                        new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential(
                            disco.AppIdentity.ClientId,
                            disco.AppIdentity.ClientSecret),
                        ServiceResourceId)).AccessToken);
        }
        private async Task <string> GetAccessToken()
        {
            string ServiceResourceId  = "https://outlook.office365.com";
            Uri    ServiceEndpointUri = new Uri("https://outlook.office365.com/ews/odata");

            DiscoveryContext disco = await DiscoveryContext.CreateAsync();

            // this triggers user login prompt for Office 365
            ResourceDiscoveryResult rdr = await disco.DiscoverResourceAsync(ServiceResourceId);

            string           clientId     = disco.AppIdentity.ClientId;
            string           clientSecret = disco.AppIdentity.ClientSecret;
            string           refreshToken = new SessionCache().Read("RefreshToken");
            ClientCredential creds        = new ClientCredential(clientId, clientSecret);

            AuthenticationResult authResult =
                await disco.AuthenticationContext.AcquireTokenByRefreshTokenAsync(refreshToken,
                                                                                  creds,
                                                                                  ServiceResourceId);

            return(authResult.AccessToken);
        }
        private async Task <ExchangeClient> EnsureClientCreated()
        {
            // get or create DiscoveryContext
            DiscoveryContext disco = GetFromCache("DiscoveryContext") as DiscoveryContext;

            if (disco == null)
            {
                disco = await DiscoveryContext.CreateAsync();

                SaveInCache("DiscoveryContext", disco);
            }

            // obtain ResourceDiscoveryResult for Exchange
            string ServiceResourceId    = "https://outlook.office365.com";
            ResourceDiscoveryResult dcr = await disco.DiscoverResourceAsync(ServiceResourceId);

            SaveInCache("LastLoggedInUser", dcr.UserId);
            string clientId           = disco.AppIdentity.ClientId;
            string clientSecret       = disco.AppIdentity.ClientSecret;
            Uri    ServiceEndpointUri = new Uri("https://outlook.office365.com/ews/odata");

            // create ExchangeClient object with callback function for obtaining access token
            ExchangeClient exchangeClient = new ExchangeClient(ServiceEndpointUri, async() => {
                AuthenticationContext authContext = disco.AuthenticationContext;
                ClientCredential creds            = new ClientCredential(clientId, clientSecret);
                UserIdentifier userId             = new UserIdentifier(dcr.UserId, UserIdentifierType.UniqueId);
                // execute call across network to acquire access token
                AuthenticationResult authResult =
                    await authContext.AcquireTokenSilentAsync(ServiceResourceId, creds, userId);
                // return access token to caller as string value
                return(authResult.AccessToken);
            });

            // return new ExchangeClient to caller
            return(exchangeClient);
        }
        private async Task <ExchangeClient> EnsureClientCreated()
        {
            DiscoveryContext disco = GetFromCache("DiscoveryContext") as DiscoveryContext;

            if (disco == null)
            {
                disco = await DiscoveryContext.CreateAsync();

                SaveInCache("DiscoveryContext", disco);
            }

            string ServiceResourceId  = "https://outlook.office365.com";
            Uri    ServiceEndpointUri = new Uri("https://outlook.office365.com/ews/odata");


            var dcr = await disco.DiscoverResourceAsync(ServiceResourceId);

            string clientId     = disco.AppIdentity.ClientId;
            string clientSecret = disco.AppIdentity.ClientSecret;

            SaveInCache("LastLoggedInUser", dcr.UserId);


            ExchangeClient exClient = new ExchangeClient(ServiceEndpointUri, async() => {
                // set it up
                ClientCredential creds            = new ClientCredential(clientId, clientSecret);
                UserIdentifier userId             = new UserIdentifier(dcr.UserId, UserIdentifierType.UniqueId);
                AuthenticationContext authContext = disco.AuthenticationContext;
                // call across network
                AuthenticationResult authResult = await authContext.AcquireTokenSilentAsync(ServiceResourceId, creds, userId);
                // return access token
                return(authResult.AccessToken);
            });

            return(exClient);
        }