Hi all, The following is the finalized approach for API-Proxy.
API-Proxy will act as a gateway which will pass the requests coming from the SPA-client to the corresponding backend API. Before passage acces_token will be included in the request header as follows, "Authorization: Bearer <access_token>" If I'm to explain this by using an example, it would look like the following. *request from SPA-client to the oauth2-proxy: * https://hostA.com/oauth2-proxy/api/{app-session-code}/bar?name=lionels *request to the backend-api from the oauth2-proxy: * -H "Authorization: Bearer <access_token>" https://hostB.com/bar?name=lionels Here the host-mapping (hostA => hostB) is a configuration of the proxy. Appreciate suggestions and amendments. Best, Thilina. On Tue, Nov 21, 2017 at 12:48 PM, Thilina Madumal <[email protected]> wrote: > Hi all, > > Since we are clear with the concept behind the Proxy let's get back to the > discussion of APIProxy implementation. > > While researching I found that Yahoo provides an API proxy service and it > adopts SQL like language. Please see [1]. > > In our implementation, we also can adopt the same. For an example from the > SPA it just need to send a query parameter like [2] > > If so a request from SPA to our APIProxy will look like [3] > > WDYT? > > [1] https://developer.yahoo.com/yql/guide/overview.html > [2] get name:name,age:18,city:colombo from https://some.third.party. > api.com > [3] https://wso2.is:9443/oauth_proxy/api_proxy?code="appIdCode"&query="get > name:name,age:18,city:colombo from https://some.third.party.api.com" > > Thanks, > Thilina > > On Mon, Nov 20, 2017 at 1:29 PM, roshan wijesena <[email protected]> > wrote: > >> Thanks Prabath. >> >> It is clear now. >> >> Regards >> Roshan >> >> >> On Mon, Nov 20, 2017 at 6:11 PM Prabath Siriwardena <[email protected]> >> wrote: >> >>> Let me clarify what is solved by the encryption here.. >>> >>> Here the proxy uses the code grant type - and it gets access token + >>> refresh token. Proxy can either store that at server side and replicate it >>> across all the nodes - or store them in an encrypted cookie, and make >>> things stateless.. >>> >>> Encryption is used here to make the application stateless - and the end >>> user will not get access to the access token or the refresh token. >>> >>> Then again, if someone finds the value stored in the session storage and >>> then talk to the proxy API passing that along with all the encrypted >>> cookies through its own app (say cURL).. it will not work... >>> >>> To make the above blocked - you need to have TLS channel binding between >>> the browser and the proxy - and you need not to worry about APIs (whether >>> they support channel binding or not)... >>> >>> The other benefit proxy gives is support for CORS - you need not to >>> worry whether the external APIs support CORS or not... >>> >>> Thanks & regards, >>> -Prabath >>> >>> >>> On Sun, Nov 19, 2017 at 11:44 PM, Thilina Madumal <[email protected]> >>> wrote: >>> >>>> +Dev list >>>> >>>> On Mon, Nov 20, 2017 at 11:01 AM, Thilina Madumal <[email protected]> >>>> wrote: >>>> >>>>> Hi Roshan, >>>>> >>>>> >>>>> On Mon, Nov 20, 2017 at 10:43 AM, roshan wijesena < >>>>> [email protected]> wrote: >>>>> >>>>>> Hi Thilina, >>>>>> >>>>>> How do you create this encrypted token? I agree with NuwanD, if you >>>>>> store that encrypted token in the browser, and if some one got that token >>>>>> he can >>>>>> >>>>> >>>>> For now I'm using symetric encryption. Encrypted tokens are stored in >>>>> a cookie and sent to the browser. >>>>> >>>>> >>>>>> access your protected backed via proxy call. The point is encrypted >>>>>> token seems not fixing the problem, which you trying to achieve. >>>>>> >>>>> >>>>> So what do you suggest? >>>>> You are suggesting to store the tokens at the Proxy against some key >>>>> (say sessionID), and send this sessionID as a cookie to the >>>>> browser-client? >>>>> If so, what if this cookie is stolen? It is the same case right? >>>>> >>>>> >>>>>> >>>>>> Regards >>>>>> Roshan >>>>>> >>>>>> On Mon, Nov 20, 2017 at 4:01 PM, Thilina Madumal <[email protected] >>>>>> > wrote: >>>>>> >>>>>>> Hi Nuwan, >>>>>>> >>>>>>> >>>>>>> On Mon, Nov 20, 2017 at 1:54 AM, Nuwan Dias <[email protected]> wrote: >>>>>>> >>>>>>>> Hi Thilina, >>>>>>>> >>>>>>>> I still don't understand how encrypting this information makes the >>>>>>>> proxy stateless. What state would the proxy have to bear if this >>>>>>>> information was in plain text? Also why would you need to store the >>>>>>>> id_token on client side? >>>>>>>> >>>>>>> >>>>>>> If the access_token is not stored at the browser side, then the >>>>>>> proxy need to store the access_token against some key at the proxy >>>>>>> side. It >>>>>>> is same with the id_token. We need the id_token to understand the >>>>>>> context >>>>>>> of the access_token. >>>>>>> >>>>>>> In order to avoid storing tokens at the Proxy, we need to send those >>>>>>> to the browser client. Sending them as plain text is not a wise thing to >>>>>>> do. That's where the encryption comes in handy. >>>>>>> >>>>>>> However the important thing to note here is, there is no server-side >>>>>>> for these SPAs. We don't target the web-applications with a server-side. >>>>>>> Our focus is only pure SPAs where there is no corresponding server side. >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> Yes, encrypting the token and other info would prevent an attacker >>>>>>>> calling the APIs directly. But an attacker wouldn't be worried about >>>>>>>> calling the APIs directly. He would just call through the proxy, just >>>>>>>> like >>>>>>>> the SPA itself does. >>>>>>>> >>>>>>> >>>>>>> If the attacker can get hold of the cookies, yes this can happen. >>>>>>> However given that if we have secured the cookies and make them >>>>>>> HTTPOnly we >>>>>>> can ensure security up to some level, can't we? >>>>>>> >>>>>>> However if an attacker got hold of your facebook, google, or >>>>>>> whatever cookies then he will be able to forge your identity. IMO this >>>>>>> to >>>>>>> happen, the attacker should either hack your machine or you should hand >>>>>>> over the cookies willingly. Given that cookies are secured and HttpOnly, >>>>>>> man in the middle attack or, cross-site scripts will not be able to >>>>>>> exploit >>>>>>> the cookies. >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> Thanks, >>>>>>>> NuwanD. >>>>>>>> >>>>>>>> On Sun, 19 Nov 2017 at 9:05 pm, Thilina Madumal < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> Hi Nuwan, >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sun, Nov 19, 2017 at 8:48 PM, Nuwan Dias <[email protected]> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Hi Thilina, >>>>>>>>>> >>>>>>>>>> What do you gain by encrypting the token that is to be stored on >>>>>>>>>> the client side? Since the client does not seem to be doing any >>>>>>>>>> decryption >>>>>>>>>> before using the >>>>>>>>>> >>>>>>>>> >>>>>>>>> FYI here it is not only just the access_token. It is access_token >>>>>>>>> + refresh_token + id_token altogether. >>>>>>>>> Token encrypted and stored in the client side to make the proxy >>>>>>>>> stateless. >>>>>>>>> The Cookie that posesses these data is secured and HttpOnly. >>>>>>>>> >>>>>>>>> >>>>>>>>>> token, theft of an encrypted token could be just as bad as the >>>>>>>>>> one in plain text isn't it? >>>>>>>>>> >>>>>>>>> >>>>>>>>> All the requests for the third party APIs should go through the >>>>>>>>> proxy, and proxy do the decryption and calling the APIs. >>>>>>>>> This way whoever steal the encrypted token, would not be able to >>>>>>>>> call the third-party API directly. >>>>>>>>> >>>>>>>>> On the other hand in a theft of encrypted token, we have the >>>>>>>>> control to restrict the calls to third party APIs beacause all traffic >>>>>>>>> should flow through the proxy. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> NuwanD. >>>>>>>>>> >>>>>>>>>> On Sat, 18 Nov 2017 at 11:37 pm, Cyril Rognon < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>>> Hi Roshan, >>>>>>>>>>> >>>>>>>>>>> IS DCR is just fine and flexible. I was just referring to the >>>>>>>>>>> SPA use case without server side proxy. >>>>>>>>>>> >>>>>>>>>>> If I understand correctly apim server is providing this proxy >>>>>>>>>>> endpoint to handle token storage or decrypt. >>>>>>>>>>> >>>>>>>>>>> So far it seems there is no answer to replace the api-proxy >>>>>>>>>>> scenario. >>>>>>>>>>> >>>>>>>>>>> Maybe the dcr could "generate" some server side support endpoint >>>>>>>>>>> :) ? >>>>>>>>>>> >>>>>>>>>>> Thanks >>>>>>>>>>> Cyril >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Le 18 nov. 2017 20:54, "roshan wijesena" <[email protected]> >>>>>>>>>>> a écrit : >>>>>>>>>>> >>>>>>>>>>> Hi Cyril >>>>>>>>>>> >>>>>>>>>>> Yes, I agree. AFAIK it uses a identity server DCR implementation >>>>>>>>>>> to create a service provider and get a token on the fly. >>>>>>>>>>> >>>>>>>>>>> Do you see any problems in that approach? >>>>>>>>>>> >>>>>>>>>>> Regards >>>>>>>>>>> Roshan >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Sat, Nov 18, 2017 at 2:24 AM Cyril Rognon < >>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi Roshan, >>>>>>>>>>>> >>>>>>>>>>>> I have looked at the APIM 3.0.0-M7 security ilmplementation for >>>>>>>>>>>> store and publisher SPAs and it seems that it is using password >>>>>>>>>>>> grant_type >>>>>>>>>>>> and using "server-side" endpoints provided by apim server >>>>>>>>>>>> /login/token/publisher or /login/token/store. >>>>>>>>>>>> Do you agree or did I miss something ? >>>>>>>>>>>> >>>>>>>>>>>> Thanks >>>>>>>>>>>> Cyril >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> 2017-11-17 6:30 GMT+01:00 roshan wijesena < >>>>>>>>>>>> [email protected]>: >>>>>>>>>>>> >>>>>>>>>>>>> Can you please explain more about this API-proxy ? is it only >>>>>>>>>>>>> for decrypt the token? >>>>>>>>>>>>> >>>>>>>>>>>>> APIM 3.0.X has SPA's for it's publisher and store apps, have a >>>>>>>>>>>>> look at security implementation of it. AFAIK, there is a no API >>>>>>>>>>>>> proxy in >>>>>>>>>>>>> that implementation. >>>>>>>>>>>>> >>>>>>>>>>>>> On Thu, Nov 16, 2017 at 11:06 PM, Thilina Madumal < >>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi Devs, >>>>>>>>>>>>>> >>>>>>>>>>>>>> The idea of an API-Proxy for Single Page Applications is >>>>>>>>>>>>>> quite helpful in mitigating inherent security risks of keeping >>>>>>>>>>>>>> the >>>>>>>>>>>>>> access_token in the browser side as plain text. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Here the idea is to keep the access_token encrypted and set >>>>>>>>>>>>>> in a cookie. API-Proxy will mediate all the calls for the >>>>>>>>>>>>>> third-party APIs >>>>>>>>>>>>>> by decrypting the access_token value and calling the requested >>>>>>>>>>>>>> third-party >>>>>>>>>>>>>> APIs with the decrypted access_token. >>>>>>>>>>>>>> >>>>>>>>>>>>>> This is a significantly valuable use-case for the SPAs where >>>>>>>>>>>>>> there is no attached server-side other than the container which >>>>>>>>>>>>>> is used to >>>>>>>>>>>>>> facilitate the initial page download. >>>>>>>>>>>>>> >>>>>>>>>>>>>> I'm in the requirement gathering phase. Would appreciate your >>>>>>>>>>>>>> suggestions on, >>>>>>>>>>>>>> >>>>>>>>>>>>>> - what are the nice to have capabilities in API-Proxy >>>>>>>>>>>>>> - what are the complexities that will arise while >>>>>>>>>>>>>> implementing this >>>>>>>>>>>>>> - how to achieve the third-party API call mediation >>>>>>>>>>>>>> - Is this a valid use-case >>>>>>>>>>>>>> - or is this a redundant effort >>>>>>>>>>>>>> - are there any alternatives >>>>>>>>>>>>>> - and etc. >>>>>>>>>>>>>> >>>>>>>>>>>>>> This is an open invitation to shoot whatever pops into your >>>>>>>>>>>>>> mind in this regards:) >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks in advance. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Cheers, >>>>>>>>>>>>>> Thilina >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> *Thilina Madumal* >>>>>>>>>>>>>> *Software Engineer | **WSO2* >>>>>>>>>>>>>> Email: [email protected] >>>>>>>>>>>>>> Mobile: *+ <+94%2077%20767%201807>94 774553167 >>>>>>>>>>>>>> <077%20455%203167>* >>>>>>>>>>>>>> Web: <http://goog_716986954>http://wso2.com >>>>>>>>>>>>>> >>>>>>>>>>>>>> <http://wso2.com/signature> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>> Dev mailing list >>>>>>>>>>>>>> [email protected] >>>>>>>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>> Dev mailing list >>>>>>>>>>>>> [email protected] >>>>>>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>> Nuwan Dias >>>>>>>>>> >>>>>>>>>> Software Architect - WSO2, Inc. http://wso2.com >>>>>>>>>> email : [email protected] >>>>>>>>>> Phone : +94 777 775 729 <+94%2077%20777%205729> >>>>>>>>>> >>>>>>>>> >>>>>>>>> Best, >>>>>>>>> >>>>>>>>> Thilina >>>>>>>>> >>>>>>>>> -- >>>>>>>>> *Thilina Madumal* >>>>>>>>> *Software Engineer | **WSO2* >>>>>>>>> Email: [email protected] >>>>>>>>> Mobile: *+ <+94%2077%20767%201807>94 774553167 <077%20455%203167>* >>>>>>>>> Web: <http://goog_716986954>http://wso2.com >>>>>>>>> >>>>>>>>> <http://wso2.com/signature> >>>>>>>>> >>>>>>>>> -- >>>>>>>> Nuwan Dias >>>>>>>> >>>>>>>> Software Architect - WSO2, Inc. http://wso2.com >>>>>>>> email : [email protected] >>>>>>>> Phone : +94 777 775 729 <+94%2077%20777%205729> >>>>>>>> >>>>>>> >>>>>>> Anyhow, if I'm missing anything here please correct me. >>>>>>> >>>>>>> In order to get more insight into what we are trying to accomplish >>>>>>> here, please refer the 17th pattern described in the blog [1]. >>>>>>> Also please refer the slides from 18 to 24 in the presentation [2]. >>>>>>> >>>>>>> Thanks and Best Regards, >>>>>>> Thilina >>>>>>> >>>>>>> -- >>>>>>> *Thilina Madumal* >>>>>>> *Software Engineer | **WSO2* >>>>>>> Email: [email protected] >>>>>>> Mobile: *+ <+94%2077%20767%201807>94 774553167 <077%20455%203167>* >>>>>>> Web: <http://goog_716986954>http://wso2.com >>>>>>> >>>>>>> <http://wso2.com/signature> >>>>>>> >>>>>>> >>>>>> >>>>> >>>>> Best, >>>>> Thilina. >>>>> -- >>>>> *Thilina Madumal* >>>>> *Software Engineer | **WSO2* >>>>> Email: [email protected] >>>>> Mobile: *+ <+94%2077%20767%201807>94 774553167 <077%20455%203167>* >>>>> Web: <http://goog_716986954>http://wso2.com >>>>> >>>>> <http://wso2.com/signature> >>>>> >>>>> >>>> >>>> >>>> -- >>>> *Thilina Madumal* >>>> *Software Engineer | **WSO2* >>>> Email: [email protected] >>>> Mobile: *+ <+94%2077%20767%201807>94 774553167 <077%20455%203167>* >>>> Web: <http://goog_716986954>http://wso2.com >>>> >>>> <http://wso2.com/signature> >>>> >>>> >>>> _______________________________________________ >>>> Dev mailing list >>>> [email protected] >>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>> >>>> >>> >>> >>> -- >>> Thanks & Regards, >>> Prabath >>> >>> Twitter : @prabath >>> LinkedIn : http://www.linkedin.com/in/prabathsiriwardena >>> >>> Mobile : +1 650 625 7950 <+1%20650-625-7950> >>> >>> http://facilelogin.com >>> _______________________________________________ >>> Dev mailing list >>> [email protected] >>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>> >> > > > -- > *Thilina Madumal* > *Software Engineer | **WSO2* > Email: [email protected] > Mobile: *+ <+94%2077%20767%201807>94 774553167* > Web: <http://goog_716986954>http://wso2.com > > <http://wso2.com/signature> > > -- *Thilina Madumal* *Software Engineer | **WSO2* Email: [email protected] Mobile: *+ <+94%2077%20767%201807>94 774553167* Web: <http://goog_716986954>http://wso2.com <http://wso2.com/signature>
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
