public async Task GetRawTokenAsync_SendsCorrectRequest() { HttpConfiguration config = new HttpConfiguration(); config.SetMobileAppSettingsProvider(new MobileAppSettingsProvider()); string accessToken = "facebookAccessToken"; string authToken = "zumoAuthToken"; string facebookId = "facebookUserId"; string providerName = "Facebook"; TokenEntry tokenEntry = new TokenEntry(providerName); tokenEntry.AccessToken = accessToken; tokenEntry.AuthenticationToken = authToken; tokenEntry.UserId = facebookId; MockHttpMessageHandler handlerMock = new MockHttpMessageHandler(CreateResponse(tokenEntry)); var webappUri = "http://test"; Mock<AppServiceHttpClient> appServiceClientMock = new Mock<AppServiceHttpClient>(new Uri(webappUri)); appServiceClientMock.CallBase = true; appServiceClientMock.Setup(c => c.CreateHttpClient()) .Returns(new HttpClient(handlerMock)); // Act TokenEntry result = await appServiceClientMock.Object.GetRawTokenAsync(accessToken, "Facebook"); // Assert Assert.Equal(accessToken, result.AccessToken); Assert.Equal(authToken, result.AuthenticationToken); Assert.Equal(facebookId, result.UserId); Assert.Equal(webappUri + "/.auth/me?provider=facebook", handlerMock.ActualRequest.RequestUri.ToString()); Assert.Equal(accessToken, handlerMock.ActualRequest.Headers.GetValues("x-zumo-auth").Single()); Assert.Equal("MobileAppNetServerSdk", handlerMock.ActualRequest.Headers.GetValues("User-Agent").Single()); }
public void PopulateProviderCredentials_Facebook_CreatesExpectedCredentials() { const string UserIdClaimValue = "FacebookId"; FacebookCredentials credentials = new FacebookCredentials(); TokenEntry tokenEntry = new TokenEntry("facebook"); tokenEntry.AccessToken = "TestAccessToken"; List<ClaimSlim> claims = new List<ClaimSlim> { new ClaimSlim("Claim1", "Value1"), new ClaimSlim("Claim2", "Value2"), new ClaimSlim("Claim3", "Value3"), }; tokenEntry.UserClaims = claims; tokenEntry.UserId = UserIdClaimValue; IPrincipalExtensions.PopulateProviderCredentials(tokenEntry, credentials); Assert.Equal("TestAccessToken", credentials.AccessToken); Assert.Equal(UserIdClaimValue, credentials.UserId); Assert.Equal(claims.Count, credentials.Claims.Count); }
public void PopulateProviderCredentials_Google_CreatesExpectedCredentials() { const string UserIdClaimValue = "GoogleId"; GoogleCredentials credentials = new GoogleCredentials(); TokenEntry tokenEntry = new TokenEntry("google"); tokenEntry.AccessToken = "TestAccessToken"; tokenEntry.RefreshToken = "TestRefreshToken"; tokenEntry.ExpiresOn = DateTime.Parse("2015-03-12T16:49:28.504Z"); List<ClaimSlim> claims = new List<ClaimSlim> { new ClaimSlim("Claim1", "Value1"), new ClaimSlim("Claim2", "Value2"), new ClaimSlim("Claim3", "Value3"), }; tokenEntry.UserClaims = claims; tokenEntry.UserId = UserIdClaimValue; IPrincipalExtensions.PopulateProviderCredentials(tokenEntry, credentials); Assert.Equal("TestAccessToken", credentials.AccessToken); Assert.Equal("TestRefreshToken", credentials.RefreshToken); Assert.Equal(DateTimeOffset.Parse("2015-03-12T16:49:28.504Z"), credentials.AccessTokenExpiration); Assert.Equal(UserIdClaimValue, credentials.UserId); Assert.Equal(claims.Count, credentials.Claims.Count); }
public async Task GetIdentityAsync_Succeeds() { // Arrange TokenEntry tokenEntry = new TokenEntry("facebook"); tokenEntry.UserId = "userId"; tokenEntry.AccessToken = "accessToken"; tokenEntry.UserClaims = new List<ClaimSlim>() { new ClaimSlim(ClaimTypes.NameIdentifier, "11111111") }; HttpResponseMessage response = CreateOkResponseWithContent(tokenEntry); MockHttpMessageHandler handler = new MockHttpMessageHandler(response); ClaimsPrincipal user = new ClaimsPrincipal(CreateMockClaimsIdentity(new[] { new Claim(JwtRegisteredClaimNames.Iss, "http://contoso.com") }, true)); HttpRequestMessage request = new HttpRequestMessage(); request.Headers.Add(AuthHeaderName, "token"); //Act FacebookCredentials creds = await user.GetAppServiceIdentityAsync<FacebookCredentials>(request, new HttpClient(handler)); // Assert Assert.Equal(tokenEntry.UserId, creds.UserId); Assert.Equal(tokenEntry.AccessToken, creds.AccessToken); Assert.Equal("Facebook", creds.Provider); Assert.Equal(1, tokenEntry.UserClaims.Count()); ClaimSlim claim = tokenEntry.UserClaims[0]; Assert.Equal(ClaimTypes.NameIdentifier, claim.Type); Assert.Equal("11111111", claim.Value); Assert.Equal("http://contoso.com/.auth/me?provider=facebook", handler.ActualRequest.RequestUri.ToString()); Assert.Equal("token", handler.ActualRequest.GetHeaderOrDefault(AuthHeaderName)); }
public void IsTokenValid_ReturnsTrue_WhenTokenIsValid() { // Arrange TokenEntry tokenEntry = new TokenEntry("facebook"); tokenEntry.UserId = "userId"; tokenEntry.AuthenticationToken = "zumoAuthToken"; tokenEntry.AccessToken = "accessToken"; // Act bool result = IPrincipalExtensions.IsTokenValid(tokenEntry); // Assert Assert.True(result); }
public void PopulateProviderCredentials_Twitter_CreatesExpectedCredentials() { TwitterCredentials credentials = new TwitterCredentials(); TokenEntry tokenEntry = new TokenEntry("twitter"); tokenEntry.AccessToken = "TestAccessToken"; tokenEntry.AccessTokenSecret = "TestAccessTokenSecret"; List<ClaimSlim> claims = new List<ClaimSlim> { new ClaimSlim("Claim1", "Value1"), new ClaimSlim("Claim2", "Value2"), new ClaimSlim("Claim3", "Value3"), }; tokenEntry.UserClaims = claims; IPrincipalExtensions.PopulateProviderCredentials(tokenEntry, credentials); Assert.Equal("TestAccessToken", credentials.AccessToken); Assert.Equal("TestAccessTokenSecret", credentials.AccessTokenSecret); Assert.Equal(claims.Count, credentials.Claims.Count); }
public void PopulateProviderCredentials_AzureActiveDirectory_CreatesExpectedCredentials() { const string UserIdClaimValue = "AadId"; AzureActiveDirectoryCredentials credentials = new AzureActiveDirectoryCredentials(); TokenEntry tokenEntry = new TokenEntry("aad"); tokenEntry.AccessToken = "TestAccessToken"; tokenEntry.ExpiresOn = DateTime.Parse("2015-03-12T16:49:28.504Z"); List<ClaimSlim> claims = new List<ClaimSlim> { new ClaimSlim("Claim1", "Value1"), new ClaimSlim("Claim2", "Value2"), new ClaimSlim("Claim3", "Value3"), new ClaimSlim(TenantIdClaimType, "TestTenantId"), new ClaimSlim(ObjectIdentifierClaimType, "TestObjectId"), }; tokenEntry.UserClaims = claims; tokenEntry.UserId = UserIdClaimValue; IPrincipalExtensions.PopulateProviderCredentials(tokenEntry, credentials); Assert.Equal("TestAccessToken", credentials.AccessToken); Assert.Equal("TestTenantId", credentials.Claims.GetValueOrDefault(TenantIdClaimType)); Assert.Equal("TestObjectId", credentials.Claims.GetValueOrDefault(ObjectIdentifierClaimType)); Assert.Equal(UserIdClaimValue, credentials.UserId); Assert.Equal(claims.Count, credentials.Claims.Count); }
private static HttpResponseMessage CreateResponse(TokenEntry tokenEntry) { HttpResponseMessage response = new HttpResponseMessage(); response.Content = new StringContent(JsonConvert.SerializeObject(tokenEntry)); response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); return response; }
public void PopulateProviderCredentials_AzureActiveDirectory_CreatesExpectedCredentials() { const string UserIdClaimValue = "AadId"; AzureActiveDirectoryCredentials credentials = new AzureActiveDirectoryCredentials(); TokenEntry tokenEntry = new TokenEntry("aad"); tokenEntry.AccessToken = "TestAccessToken"; tokenEntry.IdToken = "TestIdToken"; tokenEntry.ExpiresOn = DateTime.Parse("2015-03-12T16:49:28.504Z"); List<ClaimSlim> claims = new List<ClaimSlim> { new ClaimSlim("Claim1", "Value1"), new ClaimSlim("Claim2", "Value2"), new ClaimSlim("Claim3", "Value3"), new ClaimSlim(TenantIdClaimType, "TestTenantId"), new ClaimSlim(ObjectIdentifierClaimType, "TestObjectId"), }; tokenEntry.UserClaims = claims; tokenEntry.UserId = UserIdClaimValue; IPrincipalExtensions.PopulateProviderCredentials(tokenEntry, credentials); // For AAD, the id_token value needs to get copied to AccessToken, not the access_token value. Assert.Equal("TestIdToken", credentials.AccessToken); Assert.Equal("TestTenantId", credentials.UserClaims.Single(c => string.Equals(c.Type, TenantIdClaimType, StringComparison.Ordinal)).Value); Assert.Equal("TestObjectId", credentials.UserClaims.Single(c => string.Equals(c.Type, ObjectIdentifierClaimType, StringComparison.Ordinal)).Value); Assert.Equal(UserIdClaimValue, credentials.UserId); Assert.Equal(claims.Count, credentials.UserClaims.Count()); }