[Apiman-user] Swagger + oauth2

Eric Wittmann eric.wittmann at redhat.com
Tue Mar 24 13:50:25 EDT 2015


I think this is correct, Christina.  One of the advantages of apiman is 
to push some of the common API functionality like authentication into 
the apiman layer so that your API implementation don't have to worry 
about that.

So yes - you will be able to simply deploy a REST API into a vanilla 
wildfly application server, and then you can protect it by managing the 
authentication *only* in apiman.

-Eric

On 3/24/2015 12:55 PM, Christina Lau wrote:
> Hi Eric, if I understand you correctly, it is good. Let me validate what
> you say so far, with this new change, I can simply deploy my REST APIs
> into say a vanilla wildfly application server.
>
> Then I can either use my own APIKey policy, or use your newest OAuthKC
> policy, and then I have the support for an api that is either secured by
> APIKey or OAuth2 with roles.
>
> Is that correct? If yes, it is great because I have very complex topology
> as I have to have a version of the APIs that is vanilla (if I want to just
> secure by API key) and a version that has the keycloak metadata (json,
> web.xml etc) deployed into a keycloak server.
>
> Christina Lau
> mobile: 1-647-527-1145
>
>
>
>
>
> On 2015-03-24, 12:42 PM, "Eric Wittmann" <eric.wittmann at redhat.com> wrote:
>
>> Hi Christina.
>>
>> Marc and I had a discussion today about OAuth security and I think we
>> agree on a few points.
>>
>> First of all, I think the typical approach to using apiman for
>> authentication is to enable Keycloak OAuth at the apiman layer, and then
>> to *NOT* enable Keycloak anywhere on your back-end service.  Typically
>> users would ensure that only apiman could invoke the back-end service,
>> either by doing something at the network layer (network security) or
>> some other mechanism.  Marc is looking into the options for securing the
>> connection between apiman and the back-end service (options include
>> certificate authentication and separate server->server oauth).  But the
>> idea is that the back-end service wouldn't know anything about Keycloak
>> - only apiman would.
>>
>> Here is a picture of how that might look:
>>
>> https://docs.google.com/drawings/d/1ggNcUuoMIU0zJDFBXVwPMGLovRpXWHoqlmXi2q
>> a5vHo/pub?w=1440&h=1080
>>
>> The client is responsible for getting the bearer token and including it
>> in the request to the managed service.  apiman would then consume the
>> bearer token and validate it, then strip it from the request.  apiman
>> would then proxy the request to the back-end service, using eithet
>> network trickery or something like certificate authentication to ensure
>> that only apiman can invoke it.
>>
>> The missing piece is then authorization.  So we are planning on creating
>> an Authorization policy (or perhaps we will augment the current keycloak
>> oauth policy impl) that will allow you to map resource regular
>> expressions to required role(s).  This would allow you to configure all
>> of your security (authentication + authorization) in apiman.  The only
>> thing you would use keycloak for is managing the users and the roles
>> that those users have.
>>
>> So it would look like this:
>>
>> https://docs.google.com/drawings/d/1b9ceXyOA3wzxtrav4UHERnaXE9o40D2lCUW6wF
>> QHxBA/pub?w=960&h=720
>>
>> What do you think about this approach?  I think it's the right way to
>> go, but we're obviously open to suggestions.  If you agree, then I think
>> our to-do list is:
>>
>> 1) Add authorization capabilities either via a new policy or as part of
>> the existing OAuth policy
>>
>> 2) Figure out the best way to secure the connection between apiman and
>> the back-end service (perhaps certificate auth)
>>
>> For some users #2 will be optional, with the assumption that they will
>> configure their network to ensure that external clients cannot directly
>> access back-end services.
>>
>> -Eric
>>
>


More information about the Apiman-user mailing list