I'm using Sitecore 9.2
scaled environment on Azure, and am trying to make a .Net core 2.2 project published on app service azure connects to XConnect which is also on Azure, am following this link from Sitecore documentation.
Am connecting with the following code
var xdbCollectionCert = "StoreName=My;StoreLocation=CurrentUser;FindType=FindByThumbprint;FindValue={thumbprintvalue}";
var xdbClient = "{XConnectName}"
var odataEndpoint = xdbClient + "/odata";
var collectionEndpoint = xdbClient + "/configuration";
var options = CertificateHttpClientHandlerModifierOptions.Parse(xdbCollectionCert);
var certificateModifier = new CertificateHttpClientHandlerModifier(options);
var clientModifiers = new List<IHttpClientModifier> { new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)) };
var collectionClient = new CollectionWebApiClient(new Uri(odataEndpoint), clientModifiers, new[] { certificateModifier });
var searchClient = new SearchWebApiClient(new Uri(odataEndpoint), clientModifiers, new[] { certificateModifier });
var configurationClient = new ConfigurationWebApiClient(new Uri(collectionEndpoint), clientModifiers, new[] { certificateModifier });
var cfg = new XConnectClientConfiguration(new XdbRuntimeModel(CollectionModel.Model), collectionClient, searchClient, configurationClient);
await cfg.InitializeAsync();
It worked fine in the .Net Core 2.2 project locally but when I tried it on the Azure I got stuck in the certificate part. I tried to do the same thing I have done locally and put the certificate in TLS and added WEBSITE_LOAD_CERTIFICATES
, but with no luck it gives an error that certificate not found
Sitecore.XConnect.XdbCollectionUnavailableException: The certificate was not found. Store: My, Location: CurrentUser, FindType: FindByThumbprint, FindValue: {thumbprintValue}, InvalidAllowed: False.
at Sitecore.Xdb.Common.Web.CertificateHttpClientHandlerModifier.Process(HttpClientHandler handler)
at Sitecore.Xdb.Common.Web.CommonWebApiClient`1.CreateRequestHandler()
at Sitecore.Xdb.Common.Web.CommonWebApiClient`1.CreateClient()
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Sitecore.Xdb.Common.Web.CommonWebApiClient`1.ExecuteAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at Sitecore.Xdb.Common.Web.CommonWebApiClient`1.ExecuteGetAsync(Uri route, IDictionary`2 keys)
at Sitecore.XConnect.Client.WebApi.ConfigurationWebApiClient.Refresh()
--- End of inner exception stack trace ---
at Sitecore.XConnect.Client.WebApi.ConfigurationWebApiClient.Refresh()
at Sitecore.XConnect.Client.XConnectClientConfiguration.InitializeAsync()
So, I tried this code from this link. To get the certificate from Azure:
X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certCollection = certStore.Certificates.Find(
X509FindType.FindByThumbprint,
// Replace below with your certificate's thumbprint
"E661583E8FABEF4C0BEF694CBC41C28FB81CD870",
false);
// Get the first cert with the thumbprint
if (certCollection.Count > 0)
{
X509Certificate2 cert = certCollection[0];
// Use certificate
Console.WriteLine(cert.FriendlyName);
}
certStore.Close();
but count returns zero.
Can someone please advise?