Hi Johann,

If it is related to 'request' parameter as well then I also feel it is
>> wrong to depend on the scopes here. So if we skip checking the requested
>> scope for both voluntary and essential claims, how will be the server
>> response for essential :true (essential), essential:false and null
>> (voluntary) values?
>>
>
> This is what I said. The server response for any kind of claim parameter
> (essential or voluntary) is the same. Any reason to disagree?
>

+1. This make sense. Lets consider the same server response for any claim
parameter value.

Thanks Johann.

Thanks,


On Thu, Jan 25, 2018 at 11:30 AM, Johann Nallathamby <[email protected]>
wrote:

> Hi Hasanthi,
>
> On Wed, Jan 24, 2018 at 11:14 PM, Hasanthi Purnima Dissanayake <
> [email protected]> wrote:
>
>> Hi Johann,
>>
>> First of all apologies for the late reply :).
>>
>> Hi Hasanthi,
>>>
>>> On Tue, Jan 23, 2018 at 9:31 AM, Hasanthi Purnima Dissanayake <
>>> [email protected]> wrote:
>>>
>>>> Hi Johann,
>>>>
>>>> Is there any instance in which IS will throw error to client because it
>>>>> cannot send the claim?
>>>>>
>>>>> Because in the spec it says the following.
>>>>>
>>>>> Note that even if the Claims are not available because the End-User
>>>>> did not authorize their release or they are not present, the Authorization
>>>>> Server MUST NOT generate an error when Claims are not returned, whether
>>>>> they are Essential or Voluntary, unless otherwise specified in the
>>>>> description of the specific claim.
>>>>>
>>>>> So IMO we need to have a property for each claim that says whether we
>>>>> return an error or not.
>>>>>
>>>>> Wdyt?
>>>>>
>>>>
>>>> What I understand from the above is, if a claim is marked as essential
>>>> or voluntary and if the server can not return the claim the flow should not
>>>> break and server should not throw an error if it is not specially specified
>>>> in the server side. In this scope we don't specify this from server side.
>>>> Though this is not a MUST we can add this as an improvement as it adds a
>>>> value.
>>>>
>>>
>>> So IIUC in any circumstance we don't send an error to client. Correct?
>>>
>>> Yes, we can add that property as an improvement.
>>>
>>>>
>>>>
>>>>>> 2. The claims like "nickname" it will act as a default claim and will
>>>>>> control by both requested scopes and the requested claims.
>>>>>>
>>>>>
>>>>> What do you mean by controlling using requested scope? Do you mean if
>>>>> the client doesn't request at least one scope that includes this claim we
>>>>> won't return that claim? I don't think that is mentioned in the spec. Can
>>>>> you clarify?
>>>>>
>>>>
>>>> The spec does not directly specify how should we treat for the Voluntary
>>>> Claim from the server side. So what we have planned to do is to honour the
>>>> scopes and server level requested claims when returning this claim.
>>>>
>>>
>>> IMO, because the spec doesn't say to do anything special on the OP side
>>> about not being able to release a particular claim (it says not to break
>>> the normal flow), there is nothing special we can differentiate between
>>> essential and voluntary claims. Only thing we may be able to do is, give a
>>> warning to user saying that if s/he doesn't approve an essential claim s/he
>>> won't be able to work with the application smoothly. We can't do anything
>>> beyond that right?
>>>
>>> When you say scopes which scopes are you referring to? Are they the
>>> requested scopes in the request or the defined scopes in the registry? I
>>> fail to understand what scopes have to do with claims in this case.
>>> Following is what I find in spec related to this.
>>>
>>
>> Here what I meant was requested scopes in the request. In this case the
>> request object itself can contain scope values. If  there are scopes in the
>> request object , the authorization request scopes will be overriden from
>> those scopes.
>>
>
> That is fine, if that's what the spec says. My concern is not about that.
> My concern is if there is a requested claim in the request object we must
> return it. We don't need check them against scopes.
>
>>
>>
>>> "It is also the only way to request specific combinations of the
>>> standard Claims that cannot be specified using scope values. "
>>>
>>> As I understand if the specific requested OIDC claim, is defined in the
>>> OIDC dialect, the user has a value for that claim and s/he has approved
>>> that claim for the RP, then we can send them to the RP, regardless of
>>> whether it is defined in scope or not. Otherwise we are contradicting the
>>> above statement right?
>>>
>>
>> BTW, the above statement is for 'claim' parameter not for 'request'
>> parameter right?
>>
>
> Yes it is about claim parameter.
>
>
>> If it is related to 'request' parameter as well then I also feel it is
>> wrong to depend on the scopes here. So if we skip checking the requested
>> scope for both voluntary and essential claims, how will be the server
>> response for essential :true (essential), essential:false and null
>> (voluntary) values?
>>
>
> This is what I said. The server response for any kind of claim parameter
> (essential or voluntary) is the same. Any reason to disagree?
>
> Regards,
> Johann.
>
>
>>
>> Thanks,
>>
>>
>>
>>
>> On Wed, Jan 24, 2018 at 9:14 PM, Johann Nallathamby <[email protected]>
>> wrote:
>>
>>>
>>>
>>> On Wed, Jan 24, 2018 at 2:12 PM, Farasath Ahamed <[email protected]>
>>> wrote:
>>>
>>>>
>>>>
>>>> On Tuesday, January 23, 2018, Johann Nallathamby <[email protected]>
>>>> wrote:
>>>>
>>>>> Hi Farasath,
>>>>>
>>>>> On Tue, Jan 23, 2018 at 12:13 PM, Farasath Ahamed <[email protected]>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Tuesday, January 23, 2018, Johann Nallathamby <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Hasanthi,
>>>>>>>
>>>>>>> On Tue, Jan 23, 2018 at 9:31 AM, Hasanthi Purnima Dissanayake <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hi Johann,
>>>>>>>>
>>>>>>>> Is there any instance in which IS will throw error to client
>>>>>>>>> because it cannot send the claim?
>>>>>>>>>
>>>>>>>>> Because in the spec it says the following.
>>>>>>>>>
>>>>>>>>> Note that even if the Claims are not available because the
>>>>>>>>> End-User did not authorize their release or they are not present, the
>>>>>>>>> Authorization Server MUST NOT generate an error when Claims are not
>>>>>>>>> returned, whether they are Essential or Voluntary, unless otherwise
>>>>>>>>> specified in the description of the specific claim.
>>>>>>>>>
>>>>>>>>> So IMO we need to have a property for each claim that says whether
>>>>>>>>> we return an error or not.
>>>>>>>>>
>>>>>>>>> Wdyt?
>>>>>>>>>
>>>>>>>>
>>>>>>>> What I understand from the above is, if a claim is marked as
>>>>>>>> essential or voluntary and if the server can not return the claim the 
>>>>>>>> flow
>>>>>>>> should not break and server should not throw an error if it is not
>>>>>>>> specially specified in the server side. In this scope we don't specify 
>>>>>>>> this
>>>>>>>> from server side. Though this is not a MUST we can add this as an
>>>>>>>> improvement as it adds a value.
>>>>>>>>
>>>>>>>
>>>>>>> So IIUC in any circumstance we don't send an error to client.
>>>>>>> Correct?
>>>>>>>
>>>>>>> Yes, we can add that property as an improvement.
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>> 2. The claims like "nickname" it will act as a default claim and
>>>>>>>>>> will control by both requested scopes and the requested claims.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> What do you mean by controlling using requested scope? Do you mean
>>>>>>>>> if the client doesn't request at least one scope that includes this 
>>>>>>>>> claim
>>>>>>>>> we won't return that claim? I don't think that is mentioned in the 
>>>>>>>>> spec.
>>>>>>>>> Can you clarify?
>>>>>>>>>
>>>>>>>>
>>>>>>>> The spec does not directly specify how should we treat for the 
>>>>>>>> Voluntary
>>>>>>>> Claim from the server side. So what we have planned to do is to honour 
>>>>>>>> the
>>>>>>>> scopes and server level requested claims when returning this claim.
>>>>>>>>
>>>>>>>
>>>>>>> IMO, because the spec doesn't say to do anything special on the OP
>>>>>>> side about not being able to release a particular claim (it says not to
>>>>>>> break the normal flow), there is nothing special we can differentiate
>>>>>>> between essential and voluntary claims. Only thing we may be able to do 
>>>>>>> is,
>>>>>>> give a warning to user saying that if s/he doesn't approve an essential
>>>>>>> claim s/he won't be able to work with the application smoothly. We 
>>>>>>> can't do
>>>>>>> anything beyond that right?
>>>>>>>
>>>>>>> When you say scopes which scopes are you referring to? Are they the
>>>>>>> requested scopes in the request or the defined scopes in the registry? I
>>>>>>> fail to understand what scopes have to do with claims in this case.
>>>>>>> Following is what I find in spec related to this.
>>>>>>>
>>>>>>> "It is also the only way to request specific combinations of the
>>>>>>> standard Claims that cannot be specified using scope values. "
>>>>>>>
>>>>>>> As I understand if the specific requested OIDC claim, is defined in
>>>>>>> the OIDC dialect, the user has a value for that claim and s/he has 
>>>>>>> approved
>>>>>>> that claim for the RP, then we can send them to the RP, regardless of
>>>>>>> whether it is defined in scope or not. Otherwise we are contradicting 
>>>>>>> the
>>>>>>> above statement right?
>>>>>>>
>>>>>>> Also regarding requested claims in service provider configuration,
>>>>>>> IIRC we used it as a way to control access to certain claims by service
>>>>>>> providers, which overrides the requested scopes and requested claims. 
>>>>>>> *But
>>>>>>> that is only if the requested claims list is not empty in service 
>>>>>>> provider
>>>>>>> configuration*. I.e. requested claims in service provider
>>>>>>> configuration must have at least 1 claim. Otherwise what will happen is 
>>>>>>> for
>>>>>>> every service provider we need to add all the OIDC claims if they are 
>>>>>>> going
>>>>>>> to request claims dynamically, using scopes or requested claims in the
>>>>>>> request. Do I make sense or am I missing something?
>>>>>>>
>>>>>>
>>>>>> In our current implementation requested claims and claims included in
>>>>>> requested scopes act as two filters for user claims sent to service
>>>>>> provider.
>>>>>>
>>>>>> First user claims are filtered by requested claims and then by claims
>>>>>> included in requested scope. So if an SP doesn't have any claims 
>>>>>> configured
>>>>>> as requested claims then no claims will be sent our in id_token or 
>>>>>> userinfo
>>>>>> response.
>>>>>>
>>>>>> From IS 5.2.0 this has been the behaviour.
>>>>>>
>>>>>
>>>>> Thanks for the info. This is not violating anything. But I feel it's a
>>>>> huge pain to configure all the claims as requested claims for all the
>>>>> service providers. I think we have around 25 OIDC claims. And if we have
>>>>> around 10 service providers that means we need to configure 250 claims.
>>>>>
>>>>> I believe we need to improve this. I think for OIDC implementation we
>>>>> can interpret requested claims the way I have mentioned above. I.e. if the
>>>>> list is empty we don't have to restrict anything. We can send all the
>>>>> claims defined under "oidc" scope + requested scopes in request + 
>>>>> requested
>>>>> claims in request. If at least one requested claim is defined in SP UI,
>>>>> then we send the intersection of the two.
>>>>>
>>>>> For SAML however it will have to be interpreted differently, because
>>>>> SAML2 doesn't have a way to request specific attributes. So empty list
>>>>> would mean don't send any attributes.
>>>>>
>>>>> Wdyt?
>>>>>
>>>>
>>>> Yes. A totally valid point about the pain the user has to go through to
>>>> configure request claims at Service Provider. It gets even more frustrating
>>>> for the user since he has to find the corresponding claim URI in local
>>>> dialect for each OIDC claim he wants to send out the RP.
>>>>
>>>
>>>> However, handling/interpreting claim handling specific to a protocol at
>>>> Identity Framework level doesn't sound right to me.
>>>>
>>>
>>> Wait, I have a question after reading your reply :). How do we currently
>>> handle claims for OIDC specifically in authentication framework? Haven't we
>>> written any code specific to OIDC by checking the request type?
>>>
>>>
>>>> How about providing an option at Service Provider level to get all user
>>>> claims from Framework?
>>>>
>>>
>>> If we are fine to do UI changes, following will be the best approach I
>>> would suggest.
>>>
>>> 1. In the SP UI, under Claim Configurations, we will have following
>>> options (we may decide to remove something if it doesn't suit).
>>>     a. Send requested claims only
>>>     b. Send following claims only
>>>     c. Send requested claims + following claims
>>>     d. Don't send any claims
>>>
>>> 2. Based on the above configuration the inbound authenticator will have
>>> a way to process the request and find out the claims that need to be sent
>>> to the service provider.
>>>
>>> 3. The inbound authenticator will delegate the authentication request to
>>> framework in a protocol neutral manner by specifying the requested claims.
>>>
>>> 4. Authentication framework retrieves the requested claims and sends it
>>> along with the response to inbound authenticator, and inbound authenticator
>>> will add them to final response and send it to client.
>>>
>>> Regards,
>>> Johann.
>>>
>>>
>>>>
>>>> In a way, this is something you have proposed. The difference is rather
>>>> than interpreting the "no requested claims" for OIDC. We will have a
>>>> dedicated option to send all claims that can be used for any protocol. We
>>>> retrieve all non-null user claims and add them to the context with our
>>>> default claim handler implementation. Therefore we won't have any
>>>> additional overhead to retrieve all claims.
>>>>
>>>> Then a user who wants to configure OIDC claims can simply select this
>>>> option and then OIDC scopes to limit claims sent out the RP.
>>>> WDYT?
>>>>
>>>>
>>>> Thanks,
>>>> Farasath
>>>>
>>>>
>>>>>
>>>>> Regards,
>>>>> Johann.
>>>>>
>>>>>
>>>>>>> Regards,
>>>>>>> Johann.
>>>>>>>
>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Jan 23, 2018 at 9:05 AM, Johann Nallathamby <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Hi Hasanthi,
>>>>>>>>>
>>>>>>>>> On Wed, Oct 11, 2017 at 4:35 PM, Hasanthi Purnima Dissanayake <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Hi All,
>>>>>>>>>>
>>>>>>>>>> In order to support 'Request Object' we need to support two
>>>>>>>>>> parameters.
>>>>>>>>>> 1. request parameter
>>>>>>>>>> 2. request_uri parameter
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *1. request_parameter*
>>>>>>>>>> The purpose of this parameter is for supporting to request some
>>>>>>>>>> claims other than the default Userinfo and IdToken claim set which is
>>>>>>>>>> associated with the requested scope.
>>>>>>>>>>
>>>>>>>>>> So if we consider a sample request with above parameter,
>>>>>>>>>>
>>>>>>>>>> https://localhost:9443/oauth2/authorize?
>>>>>>>>>>     response_type=code%20id_token
>>>>>>>>>>     &client_id=XXXXX
>>>>>>>>>>     &redirect_uri=http://localhost:8080/playground
>>>>>>>>>>     &scope=openid
>>>>>>>>>>     &state=af0ifjsldkj
>>>>>>>>>>     &nonce=n-0S6_WzA2Mj
>>>>>>>>>>     &request={
>>>>>>>>>>   "iss": "s6BhdRkqt3",
>>>>>>>>>>   "aud": "https://server.example.com";,
>>>>>>>>>>   "response_type": "code id_token",
>>>>>>>>>>   "client_id": "s6BhdRkqt3",
>>>>>>>>>>   "redirect_uri": "https://client.example.org/cb";,
>>>>>>>>>>   "scope": "openid",
>>>>>>>>>>   "state": "af0ifjsldkj",
>>>>>>>>>>   "nonce": "n-0S6_WzA2Mj",
>>>>>>>>>>   "max_age": 86400,
>>>>>>>>>>
>>>>>>>>>>   "claims": {
>>>>>>>>>>     "userinfo": {
>>>>>>>>>>       "given_name": {
>>>>>>>>>>         "essential": true
>>>>>>>>>>       },
>>>>>>>>>>       "nickname": null,
>>>>>>>>>>       "email": {
>>>>>>>>>>         "essential": true
>>>>>>>>>>       },
>>>>>>>>>>
>>>>>>>>>>     "id_token": {
>>>>>>>>>>       "gender": null,
>>>>>>>>>>       "birthdate": {
>>>>>>>>>>         "essential": true
>>>>>>>>>>       },
>>>>>>>>>>       "acr": {
>>>>>>>>>>         "values": [
>>>>>>>>>>           "urn:mace:incommon:iap:silver"
>>>>>>>>>>         ]
>>>>>>>>>>       }
>>>>>>>>>>     }
>>>>>>>>>>   }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> The expected behavior of Identity server will be as follows.
>>>>>>>>>>
>>>>>>>>>> 1.Consider the claims "given_name" and "email" which are marked
>>>>>>>>>> as 'essential:true' for 'userinfo' member. Even if they are not 
>>>>>>>>>> mapped with
>>>>>>>>>> the openid scope in the registry,  if these claims are requested 
>>>>>>>>>> claims,
>>>>>>>>>> then 'given_name' and 'email' will be returned from the Userinfo 
>>>>>>>>>> endpoint.
>>>>>>>>>> So as a summary the claims which have marked as 'essential : true' 
>>>>>>>>>> only get
>>>>>>>>>> controlled by the requested claims and ignore the requested scopes. 
>>>>>>>>>> If the
>>>>>>>>>> server can not provide those essential claims there wont be any 
>>>>>>>>>> failure or
>>>>>>>>>> error message returning from the server.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Is there any instance in which IS will throw error to client
>>>>>>>>> because it cannot send the claim?
>>>>>>>>>
>>>>>>>>> Because in the spec it says the following.
>>>>>>>>>
>>>>>>>>> Note that even if the Claims are not available because the
>>>>>>>>> End-User did not authorize their release or they are not present, the
>>>>>>>>> Authorization Server MUST NOT generate an error when Claims are not
>>>>>>>>> returned, whether they are Essential or Voluntary, unless otherwise
>>>>>>>>> specified in the description of the specific claim.
>>>>>>>>>
>>>>>>>>> So IMO we need to have a property for each claim that says whether
>>>>>>>>> we return an error or not.
>>>>>>>>>
>>>>>>>>> Wdyt?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> 2. The claims like "nickname" it will act as a default claim and
>>>>>>>>>> will control by both requested scopes and the requested claims.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> What do you mean by controlling using requested scope? Do you mean
>>>>>>>>> if the client doesn't request at least one scope that includes this 
>>>>>>>>> claim
>>>>>>>>> we won't return that claim? I don't think that is mentioned in the 
>>>>>>>>> spec.
>>>>>>>>> Can you clarify?
>>>>>>>>>
>>>>>>>>> Regards,
>>>>>>>>> Johann.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> This behavior is common to the id token as well.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *2. request_uri parameter*
>>>>>>>>>> In this case the url will be a pre-registered url by the RP for
>>>>>>>>>> use at the OP. The reference which is pointed from the url will 
>>>>>>>>>> consist the
>>>>>>>>>> relevant jwt. The rationale behind returning claims will be same as 
>>>>>>>>>> the
>>>>>>>>>> above in the request parameter.
>>>>>>>>>>
>>>>>>>>>> As we are planning to provide the implementation as a 5.3.0 WUM
>>>>>>>>>> update the 'acr' implementation will be not available there. So if 
>>>>>>>>>> 'acr'
>>>>>>>>>> value is requested as an essential claim a pre-define value will be
>>>>>>>>>> returned.
>>>>>>>>>>
>>>>>>>>>> Any suggestion or feedback on the above will be highly
>>>>>>>>>> appreciated.
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>>
>>>>>>>>>> Hasanthi Dissanayake
>>>>>>>>>>
>>>>>>>>>> Software Engineer | WSO2
>>>>>>>>>>
>>>>>>>>>> E: [email protected]
>>>>>>>>>> M :0718407133| http://wso2.com <http://wso2.com/>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>>
>>>>>>>>> *Johann Dilantha Nallathamby*
>>>>>>>>> Senior Lead Solutions Engineer
>>>>>>>>> WSO2, Inc.
>>>>>>>>> lean.enterprise.middleware
>>>>>>>>>
>>>>>>>>> Mobile: *+94 77 7776950*
>>>>>>>>> LinkedIn: *http://www.linkedin.com/in/johann-nallathamby
>>>>>>>>> <http://www.linkedin.com/in/johann-nallathamby>*
>>>>>>>>> Medium: *https://medium.com/@johann_nallathamby
>>>>>>>>> <https://medium.com/@johann_nallathamby>*
>>>>>>>>> Twitter: *@dj_nallaa*
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>>
>>>>>>>> Hasanthi Dissanayake
>>>>>>>>
>>>>>>>> Senior Software Engineer | WSO2
>>>>>>>>
>>>>>>>> E: [email protected]
>>>>>>>> M :0718407133| http://wso2.com <http://wso2.com/>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>>> *Johann Dilantha Nallathamby*
>>>>>>> Senior Lead Solutions Engineer
>>>>>>> WSO2, Inc.
>>>>>>> lean.enterprise.middleware
>>>>>>>
>>>>>>> Mobile: *+94 77 7776950*
>>>>>>> LinkedIn: *http://www.linkedin.com/in/johann-nallathamby
>>>>>>> <http://www.linkedin.com/in/johann-nallathamby>*
>>>>>>> Medium: *https://medium.com/@johann_nallathamby
>>>>>>> <https://medium.com/@johann_nallathamby>*
>>>>>>> Twitter: *@dj_nallaa*
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Farasath Ahamed
>>>>>> Senior Software Engineer, WSO2 Inc.; http://wso2.com
>>>>>> Mobile: +94777603866
>>>>>> Blog: blog.farazath.com
>>>>>> Twitter: @farazath619 <https://twitter.com/farazath619>
>>>>>> <http://wso2.com/signature>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> *Johann Dilantha Nallathamby*
>>>>> Senior Lead Solutions Engineer
>>>>> WSO2, Inc.
>>>>> lean.enterprise.middleware
>>>>>
>>>>> Mobile: *+94 77 7776950*
>>>>> LinkedIn: *http://www.linkedin.com/in/johann-nallathamby
>>>>> <http://www.linkedin.com/in/johann-nallathamby>*
>>>>> Medium: *https://medium.com/@johann_nallathamby
>>>>> <https://medium.com/@johann_nallathamby>*
>>>>> Twitter: *@dj_nallaa*
>>>>>
>>>>
>>>
>>>
>>> --
>>>
>>> *Johann Dilantha Nallathamby*
>>> Senior Lead Solutions Engineer
>>> WSO2, Inc.
>>> lean.enterprise.middleware
>>>
>>> Mobile: *+94 77 7776950*
>>> LinkedIn: *http://www.linkedin.com/in/johann-nallathamby
>>> <http://www.linkedin.com/in/johann-nallathamby>*
>>> Medium: *https://medium.com/@johann_nallathamby
>>> <https://medium.com/@johann_nallathamby>*
>>> Twitter: *@dj_nallaa*
>>>
>>
>>
>>
>> --
>>
>> Hasanthi Dissanayake
>>
>> Senior Software Engineer | WSO2
>>
>> E: [email protected]
>> M :0718407133| http://wso2.com <http://wso2.com/>
>>
>
>
>
> --
>
> *Johann Dilantha Nallathamby*
> Senior Lead Solutions Engineer
> WSO2, Inc.
> lean.enterprise.middleware
>
> Mobile: *+94 77 7776950*
> LinkedIn: *http://www.linkedin.com/in/johann-nallathamby
> <http://www.linkedin.com/in/johann-nallathamby>*
> Medium: *https://medium.com/@johann_nallathamby
> <https://medium.com/@johann_nallathamby>*
> Twitter: *@dj_nallaa*
>



-- 

Hasanthi Dissanayake

Senior Software Engineer | WSO2

E: [email protected]
M :0718407133| http://wso2.com <http://wso2.com/>
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to