Home > Enterprise >  CredentialCache.DefaultNetworkCredentials always authorizes request
CredentialCache.DefaultNetworkCredentials always authorizes request

Time:12-02

I have a Winforms app that sends request to an ASP.NET app that is hosted on IIS.

I have Windows authentication enabled and authorization given to a specific domain group.

When I send requests from the browser I'm prompted to login. If I supply a user that is not in the group, then the prompt just comes up again. If I use a different method of sending requests like httprepl or with python, I get 401 Unauthorized.

My Winforms app will get 401 Unauthorized if either I don't supply credentials or supply incorrect credentials.

However when I use CredentialCache.DefaultNetworkCredentials, the request from my Winforms returns success with the correct returned content.

But the user I am using is not in the group. Why is it authorizing? Furthermore when I look at the CredentialCache object, I see no values for user or password. The PreAuthenticate setting seems to not matter either when I use CredentialCache.DefaultNetworkCredentials

HttpClient client = new HttpClient(new HttpClientHandler()
                                       { 
                                           Credentials = CredentialCache.DefaultNetworkCredentials, 
                                           PreAuthenticate = true 
                                       });

And if it matters, the application pool identity is not a part of the group either.

It's possible that I ran the application once when the user was in the group, but why would subsequent attempts work even after I removed the user from the group?

I'm using ASP.NET Core 6.0, IIS 7.5, and .NET 7.0 for the Winforms app.

CodePudding user response:

The issue here was that the authorization to the ASP.NET app is dependent on a specific AD group.

Since the original Kerberos ticket does not have this new group membership information, the membership changes I was making didn't have any effect.

For the user group membership to be correctly communicated to the server, a new Kerberos ticket needs to generated. This can happen if the user were to logoff and log back in, or after the ticket expires (8 hours in my case).

So I just logged off and logged back in.

  • Related