I am converting over a part of an application from using the authc filter to a bearer token filter for the API and I have things working well enough, but one place I have an issue.  I expose an openapi-ui in my application and if I'm authenticated to the "web" side with the authc filter and attempt to use the openapi-ui (basically swagger-ui) to test an API call it fails with unauthorized even though the bearer token is being authenticated because as far as I can tell it's pulling my "web" principal out of the ThreadContext and authorizing with that.  The API keys are associated with a user in my data model but each have their own permissions as selected at creation time.  The principal for an API key (which is purely permission based) is different from the principal for the authc filter (which is just RBAC at this point).

If I'm already logged into the application then one of the first things that happens when I attempt to make a request using the openapi-ui is: 06:57:07,762 TRACE [org.apache.shiro.util.ThreadContext] (default task-22) Bound value of type [org.apache.shiro.web.subject.support.WebDelegatingSubject] for key [org.apache.shiro.util.ThreadContext_SUBJECT_KEY] to thread [default task-22] and then much later at the bottom I can see it logging my web principal (showing my username).

but if I just use curl early on I see:
07:02:53,626 TRACE [org.apache.shiro.mgt.DefaultSecurityManager] (default task-22) No identity (PrincipalCollection) found in the context.  Looking for a remembered identity. and then it flows completely through the bearer process and it works fine because it's using THAT principal and getting the proper permissions.

Is there a way to prevent this from happening? I think it's just the fact that the browser is "logged in" and since it's going through the request to those pages it loads up the web user first and binds it and then the bearer token is ignored and permissions lookup doesn't work.

Thanks,
Dave

Reply via email to