コード例 #1
0
        public async Task <IActionResult> OnGetAsync(string returnUrl = null)
        {
            ReturnUrl = returnUrl;
            var context = await _interaction.GetAuthorizationContextAsync(returnUrl);

            InputModel = new LoginInputModel {
                Username = context?.LoginHint
            };
            if (context?.IdP != null)
            {
                return(RedirectToAction("Challenge", "External",
                                        new { provider = context.IdP, returnUrl }));
            }

            ExternalProviders = await _signInManager.GetExternalAuthenticationSchemesAsync();

            var client = await _clientStore.FindEnabledClientByIdAsync(context?.ClientId);

            if (client?.IdentityProviderRestrictions != null && client.IdentityProviderRestrictions.Any())
            {
                ExternalProviders = ExternalProviders.Where(provider =>
                                                            client.IdentityProviderRestrictions.Contains(provider.Name));
            }

            return(Page());
        }
コード例 #2
0
 /// <summary>
 /// Delete user token
 /// </summary>
 /// <param name="userId"></param>
 /// <param name="provider"></param>
 public virtual async Task DeleteUserToken(Guid userId, ExternalProviders provider)
 {
     _applicationContext.AspNetUserTokens.Remove
         (await _applicationContext.AspNetUserTokens.FirstOrDefaultAsync(x => x.UserId == userId && x.LoginProvider == provider.ToString())
         ?? throw new InvalidOperationException());
     await _applicationContext.SaveChangesAsync(CancellationToken.None);
 }
コード例 #3
0
        public async Task <JObject> GetUserInfoAsync(string accessToken)
        {
            var provider = ExternalProviders.GetProviders().FirstOrDefault(x => x.Name.Equals(TokenExchangeProviders.Facebook, StringComparison.OrdinalIgnoreCase));

            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }

            var request = new Dictionary <string, string>();

            request.Add("tokenString", accessToken);
            request.Add("endpoint", provider.UserInfoEndpoint);

            var authorizationHeaderParams = QueryBuilder.GetQuery(request, TokenExchangeProviders.Twitter);

            _client.DefaultRequestHeaders.Clear();
            _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
            _client.DefaultRequestHeaders.Add("Authorization", authorizationHeaderParams);

            var result = await _client.GetAsync(provider.UserInfoEndpoint);

            if (result.IsSuccessStatusCode)
            {
                var infoObject = JObject.Parse(await result.Content.ReadAsStringAsync());
                return(infoObject);
            }
            return(null);
        }
コード例 #4
0
        public FixedList <EFilingDocument> GetOutputDocuments(string filingRequestUID)
        {
            EFilingRequest filingRequest = EFilingMapper.Map(filingRequestUID);

            var provider = ExternalProviders.GetFilingTransactionProvider(filingRequest.Procedure);

            return(provider.GetOutputDocuments(filingRequest.Transaction.UID));
        }
コード例 #5
0
ファイル: Login.cshtml.cs プロジェクト: netcore-jroger/abp
    public virtual async Task <IActionResult> OnGetAsync()
    {
        LoginInput = new LoginInputModel();

        ExternalProviders = await GetExternalProviders();

        EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin);

        if (IsExternalLoginOnly)
        {
            return(await OnPostExternalLogin(ExternalProviders.First().AuthenticationScheme));
        }

        return(Page());
    }
コード例 #6
0
        public async Task <JObject> GetUserInfoAsync(string accessToken)
        {
            var provider = ExternalProviders.GetProviders().FirstOrDefault(x => x.Name.Equals(TokenExchangeProviders.Facebook, StringComparison.OrdinalIgnoreCase));

            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }

            var urlParams = $"oauth2_access_token={accessToken}&format=json";

            var result = await _client.GetAsync($"{provider.UserInfoEndpoint}{urlParams}");

            if (result.IsSuccessStatusCode)
            {
                var infoObject = JObject.Parse(await result.Content.ReadAsStringAsync());
                return(infoObject);
            }
            return(null);
        }
コード例 #7
0
ファイル: Login.cshtml.cs プロジェクト: stantoxt/med-park-360
        public async Task <IActionResult> OnGet(string returnUrl)
        {
            var context = await _interaction.GetAuthorizationContextAsync(returnUrl);

            if (context?.IdP != null)
            {
                // if IdP is passed, then bypass showing the login screen
                return(ExternalLogin(context.IdP, returnUrl));
            }

            await BuildLoginViewModelAsync(returnUrl, context);

            if (EnableLocalLogin == false && ExternalProviders.Count() == 1)
            {
                // only one option for logging in
                return(ExternalLogin(ExternalProviders.First().AuthenticationScheme, returnUrl));
            }

            return(Page());
        }
コード例 #8
0
        public async Task <JObject> GetUserInfoAsync(string accessToken)
        {
            var provider = ExternalProviders.GetProviders().FirstOrDefault(x => x.Name.Equals(TokenExchangeProviders.Facebook, StringComparison.OrdinalIgnoreCase));

            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }
            var request = new Dictionary <string, string>();

            request.Add("token", accessToken);

            var result = await _client.GetAsync(provider.UserInfoEndpoint + QueryBuilder.GetQuery(request, TokenExchangeProviders.Google));

            if (result.IsSuccessStatusCode)
            {
                var infoObject = JObject.Parse(await result.Content.ReadAsStringAsync());
                return(infoObject);
            }
            return(null);
        }
コード例 #9
0
        /// <summary>
        /// Refresh user token
        /// By providing the refresh token from database to the Graph API
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="provider"></param>
        /// <param name="clientId"></param>
        /// <param name="redirectUri"></param>
        /// <param name="clientSecret"></param>
        private async Task RefreshUserToken(Guid userId, ExternalProviders provider, string clientId,
                                            string redirectUri, string clientSecret)
        {
            var dict = new Dictionary <string, string>
            {
                { "client_id", clientId },
                { "redirect_uri", redirectUri },
                { "client_secret", clientSecret },
                { "refresh_token", await _dataService.GetUserRefreshToken(userId, provider) },
                { "grant_type", "refresh_token" }
            };

            var client = new HttpClient();

            dict.TryGetValue("refresh_token", out var refreshToken);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var postAction = await client.PostAsync("https://login.microsoftonline.com/common/oauth2/v2.0/token",
                                                    new FormUrlEncodedContent(dict));

            var result = JsonConvert.DeserializeObject <CloudLoginModel>(await postAction.Content.ReadAsStringAsync());
            await _dataService.SetUpUserToken(result.AccessToken, refreshToken, userId, provider);
        }
コード例 #10
0
 /// <summary>
 /// Call this method to trigger the User Token Refresh Use Case
 /// </summary>
 /// <param name="accessToken"></param>
 /// <param name="refreshToken"></param>
 /// <param name="userId"></param>
 /// <param name="provider"></param>
 /// <param name="clientId"></param>
 /// <param name="redirectUri"></param>
 /// <param name="clientSecret"></param>
 public async Task VerifyUser(string accessToken, string refreshToken, Guid userId, ExternalProviders provider, string clientId,
                              string redirectUri, string clientSecret)
 {
     try
     {
         if (IsTokenAlive(accessToken, refreshToken, userId, provider).Result)
         {
             await _dataService.SetUpUserToken(accessToken, refreshToken, userId, provider);
         }
         else
         {
             await RefreshUserToken(userId, provider, clientId,
                                    redirectUri, clientSecret);
         }
     }
     catch
     {
         //
     }
 }
コード例 #11
0
        /// <summary>
        /// Verify User Token Status
        /// </summary>
        /// <param name="accessToken"></param>
        /// <param name="refreshToken"></param>
        /// <param name="userId"></param>
        /// <param name="provider"></param>
        private async Task <bool> IsTokenAlive(string accessToken, string refreshToken, Guid userId, ExternalProviders provider)
        {
            var request = new HttpClient();

            request.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
            try
            {
                var response = await request.GetAsync("https://graph.microsoft.com/v1.0/drive/root/children/");

                return(response.StatusCode != HttpStatusCode.Unauthorized);
            }
            catch (Exception)
            {
                return(false);
            }
        }
コード例 #12
0
ファイル: Login.cshtml.cs プロジェクト: firdausng/testnt
        public async Task <IActionResult> OnGetAsync(string returnUrl = null)
        {
            if (!string.IsNullOrEmpty(ErrorMessage))
            {
                ModelState.AddModelError(string.Empty, ErrorMessage);
            }

            returnUrl = returnUrl ?? Url.Content("~/");

            // Clear the existing external cookie to ensure a clean login process
            await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);

            //ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            var context = await _interaction.GetAuthorizationContextAsync(returnUrl);

            if (context?.IdP != null && await _schemeProvider.GetSchemeAsync(context.IdP) != null)
            {
                var local = context.IdP == IdentityServer4.IdentityServerConstants.LocalIdentityProvider;
                EnableLocalLogin = local;
                ReturnUrl        = returnUrl;
                Username         = context?.LoginHint;

                if (!local)
                {
                    ExternalProviders = new[] { new ExternalProvider {
                                                    AuthenticationScheme = context.IdP
                                                } };
                }
                if (EnableLocalLogin == false && ExternalProviders?.Count() == 1)
                {
                    return(RedirectToAction("Challenge", "External", new { provider = ExternalLoginScheme, returnUrl }));
                }
                return(Page());
            }

            var schemes = await _schemeProvider.GetAllSchemesAsync();

            var providers = schemes
                            .Where(x => x.DisplayName != null ||
                                   (x.Name.Equals(AccountOptions.WindowsAuthenticationSchemeName, StringComparison.OrdinalIgnoreCase))
                                   )
                            .Select(x => new ExternalProvider
            {
                DisplayName          = x.DisplayName,
                AuthenticationScheme = x.Name
            }).ToList();

            var allowLocal = true;

            if (context?.ClientId != null)
            {
                var client = await _clientStore.FindEnabledClientByIdAsync(context.ClientId);

                if (client != null)
                {
                    allowLocal = client.EnableLocalLogin;

                    if (client.IdentityProviderRestrictions != null && client.IdentityProviderRestrictions.Any())
                    {
                        providers = providers.Where(provider => client.IdentityProviderRestrictions.Contains(provider.AuthenticationScheme)).ToList();
                    }
                }
            }

            AllowRememberLogin = AccountOptions.AllowRememberLogin;
            EnableLocalLogin   = allowLocal && AccountOptions.AllowLocalLogin;
            ReturnUrl          = returnUrl;
            Username           = context?.LoginHint;
            ExternalProviders  = providers.ToArray();
            return(Page());
        }
コード例 #13
0
 /// <summary>
 /// Get user refresh Token for specified provider
 /// </summary>
 /// <param name="userId"></param>
 /// <param name="provider"></param>
 /// <returns></returns>
 public virtual async Task <string> GetUserRefreshToken(Guid userId, ExternalProviders provider)
 {
     return(JObject.Parse((await _applicationContext.AspNetUserTokens.FirstOrDefaultAsync(x =>
                                                                                          x.UserId == userId && x.LoginProvider == provider.ToString()))
                          ?.Value).GetValue("refresh_token").Value <string>());
 }
コード例 #14
0
        /// <summary>
        /// Set user token
        /// </summary>
        /// <param name="refreshToken"></param>
        /// <param name="userId"></param>
        /// <param name="provider"></param>
        /// <param name="accessToken"></param>
        public virtual async Task SetUpUserToken(string accessToken, string refreshToken, Guid userId, ExternalProviders provider)
        {
            var currentToken = await _applicationContext.AspNetUserTokens.FirstOrDefaultAsync(x =>
                                                                                              x.UserId == userId && x.LoginProvider == provider.ToString());

            if (currentToken == null)
            {
                _applicationContext.AspNetUserTokens.Add(new IdentityUserToken <Guid>()
                {
                    UserId = userId,
                    Value  = "{" + $"\"access_token\":\"{accessToken}\",\"refresh_token\":\"{refreshToken}\"" +
                             "}",
                    LoginProvider = provider.ToString(),
                    Name          = provider + ":" + userId
                });
            }
            else
            {
                currentToken.Value = "{" + $"\"access_token\":\"{accessToken}\",\"refresh_token\":\"{refreshToken}\"" +
                                     "}";
                _applicationContext.AspNetUserTokens.Update(currentToken);
            }

            await _applicationContext.SaveChangesAsync(new CancellationToken(false));
        }