protected async override Task OnInitializedAsync() { await base.OnInitializedAsync(); CurrentUserId = await AuthCsroService.GetCurrentUserId(); if (!LocalDateTimeOffset.HasValue) { try { LocalDateTimeOffset = await TimeZoneService.GetLocalDateTime(DateTimeOffset.UtcNow); } catch (Exception ex) { _loggerCsroAuthComponentBase.LogError(ex, nameof(OnInitializedAsync), ex); } } }
public async override Task LoadAsync() { try { ShowLoading(); CanView = false; SettingModels.Clear(); var auth = await AuthenticationStateProvider.GetAuthenticationStateAsync(); if (auth != null && auth.User.Identity.IsAuthenticated) { var isAdmin = auth.User.IsInRole(Core.RolesCsro.Admin); var isAdmin2 = await AuthCsroService.IsInRole(Core.RolesCsro.Admin); if (auth.User.Identity.Name.Contains("supolik")) { ShowTestEmailComp = true; isAdmin2 = false; } //if (auth.User.Identity.Name.Contains("supolik")) if (isAdmin2) { //var all = await ServiceIssueDataService.GetItemsAsync(); ////var id = await ServiceIssueDataService.GetItemByIdAsync(1); ////var trackid = await ServiceIssueDataService.GetByTrackingId("1VWB-V9G"); CanView = true; var userAuth = await UserDataService.GetUserByUserName(auth.User.Identity.Name); var azureAdOptions = Configuration.GetSection(nameof(AzureAd)).Get <AzureAd>(); string TokenCacheDbCs = Configuration.GetConnectionString(KeyVaultConfig.ConnectionStrings.TokenCacheDb); SettingModels.Add(new SettingModel { Name = nameof(TokenCacheDbCs), Value = TokenCacheDbCs.ReplaceWithStars(), Type = "Config" }); string ApiEndpoint = Configuration.GetValue <string>("ApiEndpoint"); SettingModels.Add(new SettingModel { Name = nameof(ApiEndpoint), Value = ApiEndpoint, Type = "Config" }); bool UseChainTokenCredential = Configuration.GetValue <bool>("UseChainTokenCredential"); SettingModels.Add(new SettingModel { Name = nameof(UseChainTokenCredential), Value = UseChainTokenCredential.ToString(), Type = "Config" }); var keyVaultConfig = Configuration.GetSection(nameof(KeyVaultConfig)).Get <KeyVaultConfig>(); Logger.LogInformation($"{nameof(KeyVaultConfig.UseKeyVault)} = {keyVaultConfig?.UseKeyVault}"); var readfromKV = true; //todo change for testing //if (readfromKV) if (keyVaultConfig != null && (readfromKV || keyVaultConfig.UseKeyVault)) { Logger.LogInformation($"{nameof(KeyVaultConfig.KeyVaultName)} = {keyVaultConfig.KeyVaultName}"); string type = "KeyVault-SecretClient"; int replaceChars = 30; ShowLoading(type); var clientSecretCredential = new ClientSecretCredential(azureAdOptions.TenantId, azureAdOptions.ClientId, azureAdOptions.ClientSecret); //works //var clientSecretCredential = new InteractiveBrowserCredential(); //forbiden //var clientSecretCredential = new DefaultAzureCredential(); //forbiden //var clientSecretCredential = new DefaultAzureCredential(true); //forbiden //var clientSecretCredential = new ManagedIdentityCredential(); //forbiden //var clientSecretCredential = new ManagedIdentityCredential(keyVaultConfig.AppServiceManagedIdentityId); //works, need to set access in portal try { var client = new SecretClient(new Uri(keyVaultConfig.KeyVaultName), clientSecretCredential); var secBund = await client.GetSecretAsync(keyVaultConfig.TokenCacheDbCsVaultKey); if (secBund != null) { SettingModels.Add(new SettingModel { Name = nameof(TokenCacheDbCs), Value = secBund.Value?.Value?.ReplaceWithStars(replaceChars), Type = type }); } } catch (Exception ex) { //await CsroDialogService.ShowError($"Error in SecretClient {clientSecretCredential}", $"{ex.Message}"); SettingModels.Add(new SettingModel { Name = nameof(TokenCacheDbCs), Value = ex.Message, Type = type }); } try { type = "KeyVault-KeyVaultClient"; ShowLoading(type); var keyVaultClient = new KeyVaultClient( async(authority, resource, scope) => { //var credential = new DefaultAzureCredential(false); var credential = clientSecretCredential; var token = await credential.GetTokenAsync( new Azure.Core.TokenRequestContext( new[] { "https://vault.azure.net/.default" })); return(token.Token); }); var val = await keyVaultClient.GetSecretAsync(keyVaultConfig.KeyVaultName, keyVaultConfig.TokenCacheDbCsVaultKey); if (val != null) { SettingModels.Add(new SettingModel { Name = nameof(TokenCacheDbCs), Value = val.Value?.ReplaceWithStars(replaceChars), Type = type }); } } catch (Exception ex) { //await CsroDialogService.ShowError($"Error in KeyVaultClient {clientSecretCredential}", $"{ex.Message}"); SettingModels.Add(new SettingModel { Name = nameof(TokenCacheDbCs), Value = ex.Message, Type = type }); } try { type = "KeyVault-AzureServiceTokenProvider"; ShowLoading(type); //SettingModels.Add(new SettingModel { Name = "UseKeyVault", Value = "", Type = "" }); //works var azureServiceTokenProvider = new AzureServiceTokenProvider(); var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback)); var s2 = await keyVaultClient.GetSecretAsync(keyVaultConfig.KeyVaultName, keyVaultConfig.TokenCacheDbCsVaultKey); SettingModels.Add(new SettingModel { Name = nameof(TokenCacheDbCs), Value = s2?.Value.ReplaceWithStars(replaceChars), Type = type }); } catch (Exception ex) { //await CsroDialogService.ShowError("Error in AzureServiceTokenProvider", $"{ex.Message}"); SettingModels.Add(new SettingModel { Name = nameof(TokenCacheDbCs), Value = ex.Message, Type = type }); } } //AzureAd var dic = DictionaryOfPropertiesFromInstance(azureAdOptions); if (dic != null) { foreach (var item in dic) { var set = new SettingModel { Type = "AzureAd", Name = item.Key }; //var val = item.Value.GetValue(item); //common error, don't use var val = item.Value.GetValue(azureAdOptions); set.Value = val?.ToString().ReplaceWithStars(); SettingModels.Add(set); } } //KeyVaultConfig dic = null; dic = DictionaryOfPropertiesFromInstance(keyVaultConfig); if (dic != null) { foreach (var item in dic) { var set = new SettingModel { Type = "KeyVaultConfig", Name = item.Key }; var val = item.Value.GetValue(keyVaultConfig); if (val != null) { set.Value = val?.ToString(); SettingModels.Add(set); } } } } } else { SignIn(); } } catch (Exception ex) { HideLoading(); await CsroDialogService.ShowError("Error", $"{ex.Message}"); } finally { HideLoading(); } }