/// <summary> /// Extracts the User details accessing the service as a unique id in the form /// of "{authprovider}:{uniqueId}" using ProviderCrednetials for the logged /// in user. /// </summary> /// <param name="principal">The principal accessing the service.</param> /// <param name="request">The HttpRequest used to access the service.</param> /// <returns>The unique user id.</returns> public async Task <string> GetCurrentUserRegistrationReferenceAsync(ClaimsPrincipal principal, HttpRequestMessage request) { string provider = principal?.FindFirst("http://schemas.microsoft.com/identity/claims/identityprovider").Value; ProviderCredentials creds = null; if (string.Equals(provider, "facebook", StringComparison.OrdinalIgnoreCase)) { creds = await principal.GetAppServiceIdentityAsync <FacebookCredentials>(request); } else if (string.Equals(provider, "google", StringComparison.OrdinalIgnoreCase)) { creds = await principal.GetAppServiceIdentityAsync <GoogleCredentials>(request); } else if (string.Equals(provider, "twitter", StringComparison.OrdinalIgnoreCase)) { creds = await principal.GetAppServiceIdentityAsync <TwitterCredentials>(request); } else if (string.Equals(provider, "microsoftaccount", StringComparison.OrdinalIgnoreCase)) { creds = await principal.GetAppServiceIdentityAsync <MicrosoftAccountCredentials>(request); } if (creds == null) { throw ServiceExceptions.UserNullException(); } // Format user details in the desired form of {authprovider}:{uniqueId} string authProvider = creds.Provider; string uniqueId = creds.UserClaims.FirstOrDefault(c => c.Type.Equals(ClaimTypes.NameIdentifier))?.Value; var uniqueUserName = $"{authProvider}:{uniqueId}"; return(uniqueUserName); }