Hi Johann,
>
>
> You might have missed to confirm on this. This is the most important point.
> Do you also agree that any requested claim in the request object must be
> returned regardless of the scopes we have requested or registered?
>

Agreed. I missed this previously.

Thanks,

On Mon, Jan 29, 2018 at 11:17 AM, Johann Nallathamby <[email protected]>
wrote:

> Hi Hasanthi,
>
> 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.
>>
>
> You might have missed to confirm on this. This is the most important point.
> Do you also agree that any requested claim in the request object must be
> returned regardless of the scopes we have requested or registered?
>
> Regards,
> Johann.
>
>
>>>
>>>> "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*
>>
>
>
>
> --
>
> *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