<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:webfeeds="http://webfeeds.org/rss/1.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0"><channel><webfeeds:logo>https://www.smeltz.com/blog/</webfeeds:logo><webfeeds:analytics id="" engine="GoogleAnalytics" /><title>Smeltz.com</title><link>https://www.smeltz.com/blog/</link><description>This blog is powered by DasBlog Core built on the awesome legacy of the original DasBlog!</description><copyright>Dan Smeltz</copyright><lastBuildDate>Thu, 14 Jan 2021 20:07:25 GMT</lastBuildDate><managingEditor>blog@smeltz.com</managingEditor><webMaster>blog@smeltz.com</webMaster><item xml:lang="en-US"><trackback:ping>https://www.smeltz.com/blog/feed/trackback/3d1dcb23-c0b1-477a-b091-1fba11037d74</trackback:ping><pingback:server>https://www.smeltz.com/blog/feed/pingback</pingback:server><pingback:target>https://www.smeltz.com/blog/post/3d1dcb23-c0b1-477a-b091-1fba11037d74</pingback:target><dc:creator /><wfw:comment>https://www.smeltz.com/blog/Be-careful-when-using-a-DelegatingHandler/comments#comments-start</wfw:comment><wfw:commentRss>https://www.smeltz.com/blog/feed/rss/comments/3d1dcb23-c0b1-477a-b091-1fba11037d74</wfw:commentRss><title>Be careful when using a DelegatingHandler</title><guid isPermaLink="false">https://www.smeltz.com/blog/post/3d1dcb23-c0b1-477a-b091-1fba11037d74</guid><link>https://www.smeltz.com/blog/be-careful-when-using-a-delegatinghandler</link><pubDate>Thu, 14 Jan 2021 20:07:25 GMT</pubDate><description>&lt;div&gt;&lt;p&gt;I created a DelegatingHandler to do some header manipulation for an HttpClient.&amp;nbsp; After deploying to production and getting more than one person to use the site, people were seeing information meant for someone else!&amp;nbsp; So I had to dig in and figure out what was happening.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
string userId;&lt;br /&gt;
&lt;br /&gt;
public OAuthMessageHandler(IHttpContextAccessor httpContextAccessor,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IOptions crmClientConfig,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IOptions azureAdConfig)&lt;br /&gt;
{&lt;br /&gt;&amp;nbsp; &amp;nbsp; var crmConfig = crmClientConfig.Value;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var adConfig = azureAdConfig.Value;&lt;br /&gt;
&lt;br /&gt;&amp;nbsp; &amp;nbsp; var claimsPrincipal = httpContextAccessor.HttpContext.User;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var identity = (ClaimsIdentity)claimsPrincipal.Identity;&lt;br /&gt;&amp;nbsp; &amp;nbsp; userId = identity.Claims.FirstOrDefault(c =&amp;gt; c.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value;&lt;br /&gt;
&lt;br /&gt;&amp;nbsp; &amp;nbsp; authContext = new AuthenticationContext($"https://login.microsoftonline.com/{adConfig.TenantId}");&lt;br /&gt;&amp;nbsp; &amp;nbsp; credential = new ClientCredential(crmConfig.ClientId, crmConfig.ClientSecret);&lt;br /&gt;
&lt;br /&gt;&amp;nbsp; &amp;nbsp; serviceUrl = crmConfig.Uri.ToString();&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This is what I had originally.&amp;nbsp; I had the scope of the OAuthMessageHandler set to Transient in Startup.cs.&amp;nbsp; My problem was that I was using the userId in the SendAsync override of the handler.&amp;nbsp; And it wasn't the right userId!&amp;nbsp; Why not you ask.&amp;nbsp; You said you had the handler set as Transient.&amp;nbsp; You're right, I did, but there's a little detail that isn't very easy to find about DelegatingHandlers.&amp;nbsp; &lt;em&gt;&lt;strong&gt;They are cached for a default of 2 minutes to improve performance.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So, in my naive implementation, I was using the first userId for 2 minutes after the DelegatingHandler was spun up.&amp;nbsp; To solve the problem, (which I should have done in the first place, instead of doing it in the constructor) was to move the retreival of the userId into the SendAsync override using the HttpContextAccessor that is injected into the class.&lt;/p&gt;
&lt;p&gt;So now my constructor looks like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
private readonly IHttpContextAccessor httpContextAccessor;&lt;br /&gt;
&lt;br /&gt;
public OAuthMessageHandler(IHttpContextAccessor httpContextAccessor,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IOptions crmClientConfig,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IOptions azureAdConfig)&lt;br /&gt;
{&lt;br /&gt;&amp;nbsp; &amp;nbsp; var crmConfig = crmClientConfig.Value;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var adConfig = azureAdConfig.Value;&lt;br /&gt;
&lt;br /&gt;&amp;nbsp; &amp;nbsp; var this.httpContextAccessor = httpContextAccessor.HttpContext.User;&lt;br /&gt;
&lt;br /&gt;&amp;nbsp; &amp;nbsp; authContext = new AuthenticationContext($"https://login.microsoftonline.com/{adConfig.TenantId}");&lt;br /&gt;&amp;nbsp; &amp;nbsp; credential = new ClientCredential(crmConfig.ClientId, crmConfig.ClientSecret);&lt;br /&gt;
&lt;br /&gt;&amp;nbsp; &amp;nbsp; serviceUrl = crmConfig.Uri.ToString();&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It's safe to use the HttpContextAccessor as that what it's designed to do, access the current request context.&lt;/p&gt;
&lt;p&gt;Hope it helps!&lt;/p&gt;&lt;/div&gt;</description><comments>https://www.smeltz.com/blog/Be-careful-when-using-a-DelegatingHandler/comments#comments-start</comments><category>.Net Core</category><category>HttpClient</category><category>DelegatingHandler</category><category>C#</category></item><item><trackback:ping>https://www.smeltz.com/blog/feed/trackback/4e87ef6b-73ac-4b48-a504-434a27b0f2ee</trackback:ping><pingback:server>https://www.smeltz.com/blog/feed/pingback</pingback:server><pingback:target>https://www.smeltz.com/blog/post/4e87ef6b-73ac-4b48-a504-434a27b0f2ee</pingback:target><dc:creator /><wfw:comment>https://www.smeltz.com/blog/Slightly-lost-visitor/comments#comments-start</wfw:comment><wfw:commentRss>https://www.smeltz.com/blog/feed/rss/comments/4e87ef6b-73ac-4b48-a504-434a27b0f2ee</wfw:commentRss><title>Slightly lost visitor</title><guid isPermaLink="false">https://www.smeltz.com/blog/post/4e87ef6b-73ac-4b48-a504-434a27b0f2ee</guid><link>https://www.smeltz.com/blog/slightly-lost-visitor</link><pubDate>Sat, 06 Jun 2020 17:42:00 GMT</pubDate><description>&lt;div&gt;&lt;p&gt;&lt;img src="https://lh3.googleusercontent.com/pw/ACtC-3c50iBNFW5MOG5IrwdHfXVR42i4JkQKL-6VcIQb0qUKEnAiiVOpK83AaRXqaTzj2hEr4cIKRshUqZUfmXEouNhRfW85F9lOubbgo9mmYVF4iJ9CaW3R9vaLguC5Gf78-2B_IIQlJ8BWzp3_YebsfPfM=w1364-h1024-no?authuser=0"&gt;&lt;/p&gt;&lt;p&gt;This creature was in the front lawn this morning.&amp;nbsp; I’m not sure where they came from but I hope they find what their looking for.&amp;nbsp; (No, we don’t usually have turtles in our yard, let alone the front yard.)&lt;/p&gt;&lt;/div&gt;</description><comments>https://www.smeltz.com/blog/Slightly-lost-visitor/comments#comments-start</comments></item><item><trackback:ping>https://www.smeltz.com/blog/feed/trackback/e094af12-a873-48da-bef1-ad0edde7d3f3</trackback:ping><pingback:server>https://www.smeltz.com/blog/feed/pingback</pingback:server><pingback:target>https://www.smeltz.com/blog/post/e094af12-a873-48da-bef1-ad0edde7d3f3</pingback:target><dc:creator /><wfw:comment>https://www.smeltz.com/blog/Is-this-thing-on/comments#comments-start</wfw:comment><wfw:commentRss>https://www.smeltz.com/blog/feed/rss/comments/e094af12-a873-48da-bef1-ad0edde7d3f3</wfw:commentRss><title>Is this thing on?</title><guid isPermaLink="false">https://www.smeltz.com/blog/post/e094af12-a873-48da-bef1-ad0edde7d3f3</guid><link>https://www.smeltz.com/blog/is-this-thing-on</link><pubDate>Fri, 29 May 2020 15:50:15 GMT</pubDate><description>&lt;div&gt;&lt;p&gt;I'm going to give this&amp;nbsp;&lt;strong&gt;blog&lt;/strong&gt; thing a try.&amp;nbsp; I'd like to try to post at least once a week.&amp;nbsp; We'll see how long I last.&lt;/p&gt;&lt;/div&gt;</description><comments>https://www.smeltz.com/blog/Is-this-thing-on/comments#comments-start</comments></item></channel></rss>