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*
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to