public override async Task <SqlAuthenticationToken> AcquireTokenAsync(SqlAuthenticationParameters parameters)
        {
            Console.WriteLine($"Sql Auth UserId={parameters.UserId}");
            TokenCredential tokenCredential;

            if (parameters.UserId == "LOCALDEV")
            {
                tokenCredential = new InteractiveBrowserCredential();
            }

            /*
             * else if (!string.IsNullOrEmpty(parameters.UserId))
             * {
             *  tokenCredential = new ManagedIdentityCredential(parameters.UserId);
             * }
             */
            else
            {
                tokenCredential = new DefaultAzureCredential();
            }
            var token = await tokenCredential.GetTokenAsync(new TokenRequestContext(new[] { "https://database.windows.net/.default" }), default);

            var sqlToken = new SqlAuthenticationToken(token.Token, token.ExpiresOn);

            return(sqlToken);
        }
示例#2
0
            public override async Task <SqlAuthenticationToken> AcquireTokenAsync(SqlAuthenticationParameters parameters)
            {
                string s_defaultScopeSuffix = "/.default";
                string scope = parameters.Resource.EndsWith(s_defaultScopeSuffix) ? parameters.Resource : parameters.Resource + s_defaultScopeSuffix;

                _ = parameters.ServerName;
                _ = parameters.DatabaseName;
                _ = parameters.ConnectionId;

                var cts = new CancellationTokenSource();

                cts.CancelAfter(parameters.ConnectionTimeout * 1000);

                string[]     scopes   = new string[] { scope };
                SecureString password = new SecureString();

                foreach (char c in parameters.Password)
                {
                    password.AppendChar(c);
                }
                password.MakeReadOnly();

                AuthenticationResult result = await PublicClientApplicationBuilder.Create(_appClientId)
                                              .WithAuthority(parameters.Authority)
                                              .Build().AcquireTokenByUsernamePassword(scopes, parameters.UserId, password)
                                              .WithCorrelationId(parameters.ConnectionId)
                                              .ExecuteAsync(cancellationToken: cts.Token);

                return(new SqlAuthenticationToken(result.AccessToken, result.ExpiresOn));
            }
        public override async Task <SqlAuthenticationToken> AcquireTokenAsync(SqlAuthenticationParameters parameters)
        {
            var tokenRequestContext = new TokenRequestContext(AzureSqlScopes, tenantId: _tenandId);
            var tokenResult         = await Credential.GetTokenAsync(tokenRequestContext, default);

            return(new SqlAuthenticationToken(tokenResult.Token, tokenResult.ExpiresOn));
        }
        public override async Task <SqlAuthenticationToken> AcquireTokenAsync(SqlAuthenticationParameters parameters)
        {
            var tokenProvider           = new AzureServiceTokenProvider();
            var appAuthenticationResult = await tokenProvider
                                          .GetAuthenticationResultAsync(parameters.Resource)
                                          .ConfigureAwait(false);

            return(new SqlAuthenticationToken(appAuthenticationResult.AccessToken, appAuthenticationResult.ExpiresOn));
        }
示例#5
0
                AcquireTokenAsync(SqlAuthenticationParameters parameters)
            {
                AuthenticationContext authContext =
                    new AuthenticationContext(parameters.Authority);
                authContext.CorrelationId = parameters.ConnectionId;

                var result = await authContext.AcquireTokenAsync(
                    parameters.Resource,  // "https://database.windows.net/"
                    _clientId,
                    _redirectUri,
                    new PlatformParameters(PromptBehavior.Auto),
                    new UserIdentifier(
                        parameters.UserId,
                        UserIdentifierType.RequiredDisplayableId));

                return new SqlAuthenticationToken(result.AccessToken, result.ExpiresOn);
            }
示例#6
0
        public override async Task <SqlAuthenticationToken> AcquireTokenAsync(SqlAuthenticationParameters parameters)
        {
            string clientId             = "my-client-id";
            string clientName           = "My Application Name";
            string s_defaultScopeSuffix = "/.default";

            string[] scopes = new string[] { parameters.Resource.EndsWith(s_defaultScopeSuffix) ? parameters.Resource : parameters.Resource + s_defaultScopeSuffix };

            IPublicClientApplication app = PublicClientApplicationBuilder.Create(clientId)
                                           .WithAuthority(parameters.Authority)
                                           .WithClientName(clientName)
                                           .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
                                           .Build();

            AuthenticationResult result = await app.AcquireTokenWithDeviceCode(scopes,
                                                                               deviceCodeResult => CustomDeviceFlowCallback(deviceCodeResult)).ExecuteAsync();

            return(new SqlAuthenticationToken(result.AccessToken, result.ExpiresOn));
        }
        public override async Task <SqlAuthenticationToken> AcquireTokenAsync(SqlAuthenticationParameters parameters)
        {
            var port = (this._port != 0) ? this._port : FindAvailableTcpPort(10000);

            var application = PublicClientApplicationBuilder.Create(this._clientId)
                              .WithAuthority(parameters.Authority)
                              .WithRedirectUri($"http://localhost:{port.ToString()}")
                              .Build();

            var scope = new[] { $"{parameters.Resource}/.default" };

            var result = await application.AcquireTokenInteractive(scope)
                         .WithCustomWebUi(this._webUi)
                         .WithCorrelationId(parameters.ConnectionId)
                         .WithLoginHint(parameters.UserId)
                         .ExecuteAsync().ConfigureAwait(false);

            return(new SqlAuthenticationToken(result.AccessToken, result.ExpiresOn));
        }
        public override async Task <SqlAuthenticationToken> AcquireTokenAsync(SqlAuthenticationParameters parameters)
        {
            var authResult = await _tokenProvider.GetAuthenticationResultAsync("https://database.windows.net/").ConfigureAwait(false);

            return(new SqlAuthenticationToken(authResult.AccessToken, authResult.ExpiresOn));
        }
        /// <summary>
        /// Acquires an access token for SQL using AzureServiceTokenProvider with the given SQL authentication parameters.
        /// </summary>
        /// <param name="parameters">The parameters needed in order to obtain a SQL access token</param>
        /// <returns></returns>
        public override async Task <SqlAuthenticationToken> AcquireTokenAsync(SqlAuthenticationParameters parameters)
        {
            var appAuthParameters = new SqlAppAuthenticationParameters(parameters);

            return(await AcquireTokenAsync(appAuthParameters).ConfigureAwait(false));
        }
 public SqlAppAuthenticationParameters(SqlAuthenticationParameters parameters)
 {
     Authority = parameters.Authority;
     Resource  = parameters.Resource;
     UserId    = parameters.UserId;
 }