public void Setup() { _authenticator = RsdnClientHelpers.CreateAuthenticator( TestsBase.ServiceUri, TestsBase.TestClientID, TestsBase.TestClientSecret, "offline_access", false); }
public static async Task <TokenFactory> SignInAsync(CancellationToken cancellation = default) { var port = GetFreeTcpPort(); var redirectUri = $"http://127.0.0.1:{port}/"; var authenticator = RsdnClientHelpers.CreateAuthenticator( //new Uri("https://localhost:44389"), new Uri("https://api.rsdn.org"), "test_public_client", "", "offline_access"); { using var httpListener = new HttpListener(); httpListener.Prefixes.Add(redirectUri); httpListener.Start(); var flowData = authenticator.GetCodeFlowData(redirectUri); OpenBrowser(flowData.AuthUri); var context = await httpListener.GetContextAsync(); var response = context.Response; var responseString = "<html><head></head><body>Please return to the app.</body></html>"; var buffer = Encoding.UTF8.GetBytes(responseString); response.ContentLength64 = buffer.Length; var responseOutput = response.OutputStream; await responseOutput.WriteAsync( buffer, 0, buffer.Length, cancellation); await responseOutput.FlushAsync(cancellation); responseOutput.Close(); await Task.Delay(500, cancellation); // Wait for browser to get all data httpListener.Stop(); var qs = context.Request.QueryString; var redirectParams = qs.AllKeys.ToDictionary(key => key, key => qs[key]); // Store token in closure. // Actual implementation should use ProtectedData or Windows Credentials Manager to store token on // persistent storage var token = await authenticator.GetTokenByCodeAsync(flowData, redirectParams, cancellation); return(authenticator.GetAccessTokenFactory(() => token, t => token = t)); } }
public async Task NonConfidentialClient() { var authenticator = RsdnClientHelpers.CreateAuthenticator( TestsBase.ServiceUri, "test_public_client", null, "offline_access", false); var token = await authenticator.GetTokenByPasswordAsync( TestsBase.TestUserLogin, TestsBase.TestUserPassword); Assert.IsTrue(token.AccessToken.NotNullNorWhiteSpace()); Assert.IsTrue(token.RefreshToken.NotNullNorWhiteSpace()); Assert.NotZero(token.ExpiresIn); }
public void BadClientSecret() { var authenticator = RsdnClientHelpers.CreateAuthenticator( TestsBase.ServiceUri, TestsBase.TestClientID, "BadSecret", "offline_access", false); var ex = Assert.ThrowsAsync <RsdnServiceException>(async() => await authenticator.GetTokenByPasswordAsync( TestsBase.TestUserLogin, TestsBase.TestUserPassword)); Assert.AreEqual(HttpStatusCode.Unauthorized, ex.StatusCode); Assert.AreEqual($"{WellKnownAuthErrors.BaseUri}/InvalidClient", ex.ErrorCode); }
public ApiConnectionService(AccountsService accountsService) { _accountsService = accountsService; _authenticator = RsdnClientHelpers.CreateAuthenticator( //new Uri("https://localhost:44389"), _rsdnUri, "test_public_client", "", "offline_access"); _token = _accountsService.GetCurrentToken(); Client = RsdnClientHelpers.CreateClient( _rsdnUri, _authenticator.GetAccessTokenFactory( () => _token, token => { accountsService.SetCurrentToken(token); _token = token; })); }