On Thu, 10 Oct 2019 at 12:41, Bruno Oliveira <bruno(a)abstractj.org> wrote:
3. Change the dropdown menu to:
- All apps (replacing Application-Type). I believe having
"Application-Type" in the dropdown does not add too much value.
- In-use
- Offline-access
- Third-party
- Internal
The suffix "only" I believe can be removed.
4. Checkbox with "In-use app only". Remove it because it sounds
redundant, we will provide it into the dropdown.
A single drop-down with those options would work IMO. It should have some
sort of label though, not sure what that would be.
Would need to add a config option for clients to support icon. Should
support PatternFly icon or a custom icon (not sure if that should just be
by URL or uploaded as theme resources)
2. Display the client id as we already do
3. This column will display (depending on the type of app): In-use,
Offline-access, Third-party and Internal
4. It displays "In-use" or "Not In-use"
- I don't have better wording for this, but we can change to anything else.
5. Displays application base URL
Should it really display base URL here? Seems like details that should be
displayed in expanded view instead. Displayname/client-id (2) could link to
baseUrl if set.
Name / with fallback to client-id. Label should probably be
Application/Name or something other than Client
2. Description of the app.
- Today I'm not sure if we have a description field for our clients.
Should we create this field or remove this from the UI?
3. URL: Client Base URL
4. Has access to: Realm level roles assigned to scope, based on the
Scope tab from our admin console.
4 Used to by scope for the client, but is now client scopes associated with
the client.
5. Access granted on: the date and time in which the access was
granted to that app.
- Maybe Doug knows, but from which field we can get this data? I'm
looking at ClientRepresentation, but seems to be the wrong place.
- If it's an "Internal app", omit this field.
Not sure exactly how, but this is the persisted consents that have been
granted for third-party applications. This field is not relevant to
internal applications as they don't need to be granted access.
6. Remove Access button: Removes the granted permission to the app
and
updates the list of apps on the current screen.
- If it's an "Internal app", omit this button
Third-party yes, internal no button, offline-access button should remove
offline session
Does it make sense?
On Thu, Oct 10, 2019 at 5:54 AM Marek Posolda <mposolda(a)redhat.com> wrote:
>
> On 10. 10. 19 10:50, Stian Thorgersen wrote:
>
> Should probably be called Offline-access rather than Offline. As Offline
might suggest that the app itself is offline.
>
> On Thu, 10 Oct 2019 at 10:49, Stian Thorgersen <sthorger(a)redhat.com>
wrote:
>>
>>
>>
>> On Thu, 10 Oct 2019 at 10:17, Marek Posolda <mposolda(a)redhat.com>
wrote:
>>>
>>> +1 that Application Type is confusing.
>>>
>>> I also noticed that those screenshots use the Application Type
"Third-party" for the Google, Facebook and Github. Which are not really
clients, but identity providers.
>>>
>>> It seems that author of those screenshots meant to include both
clients and identity providers in the "Application" tab. Where the identity
providers are marked as "Third-party" and clients are marked as
"Internal"
. But if I understand correctly, we don't want to include identity
providers in the "Application" tab?
>>
>>
>> Yes, we're not including identity providers in applications tab for
sure. In this case they are just being there as example third-party apps,
not IdPs.
>>
>>>
>>>
>>> So if that's true, we may want to remove "Application Type"
filter
entirely? Instead of it, we may have filters like "In-use app only",
"Offline app only", "App with consent" .
>>
>>
>> So we should be able to filter:
>>
>> * In-use only
>> * Offline only
>> * Third-party only
>> * Internal only
>
> +1 for this. And also +1 for "Offline-access" rather than
"Offline" .
>
> Marek
>>
>>
>> Exactly how that should look like, and if we can postpone the filtering
to later is another question.
>>
>>>
>>>
>>> For the last one, I am not sure if it's better to user something like
"App with consent" or "Third-party" . I am personally found "App
with
consent" a bit clearer than "Third-party" . But maybe it's just
because I
am a Keycloak developer ;)
>>>
>>> Marek
>>>
>>>
>>> On 10. 10. 19 9:18, Stian Thorgersen wrote:
>>>
>>> While looking at the
https://marvelapp.com/c90dfi0/screen/59942292 I
also realised that "Application Type" drowndown for Internal/Third-party is
a bit confusing. It's not really an application type if app is internal or
third-party.
>>>
>>> On Thu, 10 Oct 2019 at 09:17, Stian Thorgersen <sthorger(a)redhat.com>
wrote:
>>>>
>>>> Okay, so I'll try to summarise this to see if we are all in
agreement.
>>>>
>>>> Let's use
https://marvelapp.com/c90dfi0/screen/59942292 as a
reference as that shows how it will look like in the UI.
>>>>
>>>> This shows applications that are in-use and also applications that
are not in-use. The latter is the one we've been discussing on how to
filter all clients down time available not-in-use applications. More on
that later.
>>>>
>>>> Further, it shows internal and third-party (consent required)
applications. With an option to remove access to third party applications.
>>>>
>>>> It is missing applications with offline access. I suggest we add a
filter "Offline app only" next to "In-use app only", and to
differentiate
between apps in-use and apps with offline access we could set "Offline
access" where it says "In-use" for regular apps. Same as third-party apps
with would have a "Remove access" button in the expanded view.
>>>>
>>>> To advertise applications on the account console we'd add an option
to the client in admin console "Always view in account console" (not
visible on bearer-only clients).
>>>>
>>>> Now the list of clients to include in this page would be:
>>>>
>>>> * All applications from current open sessions, including offline
sessions
>>>> * All applications with granted consents to the user (a third-party
app can have a persisted consent, but not currently be in use, so this
needs to be displayed)
>>>> * All applications that have the "Always view in account
console"
option enabled
>>>>
>>>>
>>>>
>>>> On Wed, 9 Oct 2019 at 20:43, Marek Posolda <mposolda(a)redhat.com>
wrote:
>>>>>
>>>>> On 09. 10. 19 11:33, Stian Thorgersen wrote:
>>>>>
>>>>>
>>>>>
>>>>> On Tue, 8 Oct 2019 at 14:59, Marek Posolda
<mposolda(a)redhat.com>
wrote:
>>>>>>
>>>>>> On 08. 10. 19 7:54, Stian Thorgersen wrote:
>>>>>>
>>>>>> Ok, I wasn't aware that the old console was able to list
applications the user is not currently using. Testing it out I can see now
it does indeed do that, but that it is broken as it lists a lot of
irrelevant clients.
>>>>>>
>>>>>> What it should list is:
>>>>>>
>>>>>> 1. Applications currently in use - this will be any application
registered in the session (third party apps need an option to revoke
access, which will remove the granted consents)
>>>>>> 2. Applications with offline access (these need to somehow be
differentiated from the above and have an option to revoke access, which
will remove the offline session)
>>>>>> 3. Applications that are actual web applications and that are
available to the user
>>>>>>
>>>>>> What we need to discuss is what to do in step 3. It is clear to
me
that the logic in the old console is not working correctly, so we need a
better approach. What users need is the ability to discover applications
they can access from the account console, that means it should be web
applications with a baseUrl so there can be a link to open the application.
It should not list applications just because they require consent or just
because they can get an offline token, because that doesn't mean a user can
actually start using them. Further, it should be possible for a admin to
control what applications are listed there, which they can do based on what
applications users have access to and have a baseUrl set on them.
>>>>>>
>>>>>> So assuming there are those two groups of clients:
>>>>>>
>>>>>> (a) clients, which already has consent or offline access
>>>>>>
>>>>>> (b) clients, which can get consent or offline access
>>>>>
>>>>> Not quite. The groups are:
>>>>>
>>>>> (a) clients that are already in use
>>>>> (b) clients that have consent
>>>>> (c) clients that have offline access
>>>>> (d) clients that are web applications and the user can access (i.e.
account service can link to the app and the user can actually use the app)
>>>>>
>>>>> clients should not be listed just because they can get consent or
offline access, those should only be listed if they fall in (d)
>>>>>
>>>>> Yes, there are more groups. For that particular case I wanted to
clarify, I used just 2 groups for simplification. Basically clients, which
can have stuff (consent or offline token) and clients, which already have
stuff (consent or offline token).
>>>>>>
>>>>>> I think that we're in agreement that clients from group (a)
with
already available stuff should be displayed in new account console? As
there should be a way for the user to "Revoke" the consent or offline
access and new access console doesn't have any other place where to revoke
this.
>>>>>
>>>>> Yes, would have to be here
>>>>>>
>>>>>> The reason why I suggest to list also all clients from group (b)
is
some potential usability concern. For example assume you have client, which
has active offline token, but it hasn't any roles (for example because this
client doesn't use RBAC). Now what will happen is:
>>>>>>
>>>>>> - User clicks "Revoke" on client.
>>>>>>
>>>>>> - Client will disappear from the new account console because
user
doesn't have any roles for this client and this client doesn't have active
offline token now.
>>>>>>
>>>>>> My question is, isn't it confusing from UX perspective that
some
clients will disappear from the UI when you click "Revoke" button? Just
some clients will disappear, because clients with any permission/role
available won't disappear.
>>>>>>
>>>>>> Or is it an option that clients won't disappear right-away
after
click "Revoke", but after page refresh? This would mean that after click
"Revoke" button, UI can't send another REST request to obtain fresh list
of
clients (as that would cause client to disappear).
>>>>>
>>>>> That is the expected behaviour, and would not be confusing. Try
doing it to GitHub, Google, etc. once you have removed access/consent the
client is removed from the list.
>>>>>
>>>>> Ok, thanks.
>>>>>
>>>>> That's something I wanted to clarify as it seemed to me a bit
confusing regarding user experience. But apparently, it is not.
>>>>>>
>>>>>>
>>>>>> I like the idea of using (user has permission for at least one
role
with any client scope) instead of (user has one role) as front-end clients
like SPA type apps won't use any client roles, and it also works when realm
roles are used.
>>>>>>
>>>>>> Yes, I agree regarding frontend clients.
>>>>>>
>>>>>> Besides that, one of the original reasons for the condition
(user
has permission for at least one role with any client scope) is, that it
matches clients with the role scope to "offline_access" role when
"offline_access" client scope is used. Some time ago, we discussed removing
"offline_access" role. This will makes sense now when we have client scopes
and "offline_access" client scope.
>>>>>>
>>>>>> But until "offline_access" role is removed, almost all
clients in
the realm will be displayed if we use that condition. I am not sure if this
is what we want or not (Depends on what we agree regarding the UX concern I
had in previous paragraph).
>>>>>>
>>>>>>
>>>>>> I'm concerned with the approach you (Marek) listed with
regards to
client scope. Iterating through every client and calling
TokenManager.getAccess is going to be incredibly expensive, so is not an
option, even with pagination. If you do that with pagination we'd need to
fetch 10 clients, run TokenManager.getAccess, find 1 client with access,
then continue until we've built enough for a single page. It has to be
something that we can actually query directly somehow, but that is
difficult with groups and composite roles.
>>>>>>
>>>>>> The performance of TokenManager.getAccess is possibly not so
bad.
I did some improvement in this part last year during work on client scopes.
Most of the things don't need DB query as all entities (clients, client
scopes, groups, roles, users) are cached together with their "direct" role
memberships in the local infinispan cache. However for deployments with
thousands of roles or clients, it could be tricky...
>>>>>
>>>>> What about if there are 10K clients?
>>>>>
>>>>> Yep, I know. See the last sentence from the last paragraph I
mentioned :)
>>>>>
>>>>> Nobody yet reported any performance issue against old account
console "Applications" tab. I don't know how much people really has
deployments with thousands of roles or clients... But we need to count with
the fact, that somebody will have such use-case.
>>>>>
>>>>> Marek
>>>>>>
>>>>>> Thing is, that AFAIK nobody yet (surprisingly) reported any
performance issue with the "Applications" tab in the old account console
even if it doesn't have pagination. Maybe it is because people don't use
old account console :) But who knows...
>>>>>>
>>>>>> Stan suggested to wait for feedback before doing pagination. I
agree with that.
>>>>>>
>>>>>> Marek
>>>>>>
>>>>>>
>>>>>> On Mon, 7 Oct 2019 at 21:51, Marek Posolda
<mposolda(a)redhat.com>
wrote:
>>>>>>>
>>>>>>> On 07. 10. 19 18:09, Stian Thorgersen wrote:
>>>>>>>
>>>>>>> Marek -
>>>>>>>
>>>>>>> One big difference between the new and the old console is
that the
old console only listed applications the user was currently logged-in to
(basically it was listed in a session, offline or regular). The new console
also lists applications that are available to the user to log-in to.
>>>>>>>
>>>>>>> No, the old account console doesn't list only
applications the
user is currently logged-in to. It also lists all the applications
available to the user.
>>>>>>>
>>>>>>> The old account console basically shows all the clients,
which
matches this pseudo-condition:
>>>>>>>
>>>>>>> (client is NOT bearer-only && (client has consent
required ||
(user has permission for at least one role with any client scope)))
>>>>>>>
>>>>>>> The last sub-condition is a bit tricky, but simply said, all
the
clients, which are allowed to retrieve offline token are listed in the old
console. Which are defacto almost all clients, which are not bearer-only.
>>>>>>>
>>>>>>> My point is, that new account console doesn't have any
separate
page to manage offline tokens, is it correct? So the "Applications" page of
new account console will be still used to revoke offline tokens and
consents, right? In that case, the new account console should display all
the clients, for which user can obtain consent or offline token. And
offline token can by default be retrieved for almost every client in the
realm, which is not bearer-only. Which would mean that filtering won't help
to filter too much clients. Hence I guess pagination might be probably
needed.
>>>>>>>
>>>>>>> Marek
>>>>>>>
>>>>>>>
>>>>>>> The new console should list applications within a session in
the
same way as it is done in the old console - although not sure removing
bearer-only is correct. For regular sessions only apps that can do a login
is registered in the session, for offline sessions the client should be
listed regardless of its type.
>>>>>>>
>>>>>>> What we've been discussing here is what is the list of
applications available to a user, but that are not part of the session.
What you are suggesting doesn't make all that much sense to me in this
context.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Mon, 7 Oct 2019 at 16:24, Bruno Oliveira
<bruno(a)abstractj.org>
wrote:
>>>>>>>>
>>>>>>>> I just talked with Stian this morning and we agreed on:
>>>>>>>>
>>>>>>>> 1. It's mandatory that Option 1 becomes part version
of the New
>>>>>>>> Account Console. The current Jira was updated
>>>>>>>>
https://issues.jboss.org/browse/KEYCLOAK-5628 to reflect
such
>>>>>>>> requirement.
>>>>>>>>
>>>>>>>> 2 Filtering and pagination can be postponed for future
releases.
Jiras
>>>>>>>> to follow up on this are here:
>>>>>>>> -
https://issues.jboss.org/browse/KEYCLOAK-11534
>>>>>>>> -
https://issues.jboss.org/browse/KEYCLOAK-11677
>>>>>>>>
>>>>>>>> If we are all aboard with this, I think we should move
on.
Otherwise,
>>>>>>>> please let us know.
>>>>>>>>
>>>>>>>> On Fri, Oct 4, 2019 at 1:35 PM Marek Posolda
<mposolda(a)redhat.com>
wrote:
>>>>>>>> >
>>>>>>>> > On 04. 10. 19 16:41, Stan Silvert wrote:
>>>>>>>> > > On 10/4/2019 10:16 AM, Stian Thorgersen
wrote:
>>>>>>>> > >> Okay, so I've re-read and we're on
the same page I believe.
Sorry for
>>>>>>>> > >> that (trying to do to many things with too
little time).
>>>>>>>> > >>
>>>>>>>> > >> Option 1 limiting the list to real
apps/UIs and those the
user has
>>>>>>>> > >> access to is what we should do since you
are on board with
this.
>>>>>>>> > >> Option 2 can then be dropped completely as
it was just a
quicker
>>>>>>>> > >> temporary solution.
>>>>>>>> > >>
>>>>>>>> > >> To limit to real apps in addition to what
I listed before I
would also
>>>>>>>> > >> only include apps that have a display name
set.
>>>>>>>> > > Ideally, we should have a flag for this. I
don't like the
idea that we
>>>>>>>> > > have to rely on the administrator to
understand that a
display name
>>>>>>>> > > being blank in admin console conveys a certain
meaning in
account console.
>>>>>>>> > >> To limit apps that users have access to.
Thinking about this
some more
>>>>>>>> > >> and the ideal I think would be to only
list apps where user
has at
>>>>>>>> > >> least one client role. That may be a bit
tricky though, but
perhaps a
>>>>>>>> > >> smart query could solve that? I'm open
to other ideas here
for sure
>>>>>>>> > >> though.
>>>>>>>> > > I think an approach like that would work. It
would be
helpful to an
>>>>>>>> > > admin if there was something in the admin
console that did
this query
>>>>>>>> > > and showed explicitly which applications a
given user has
access to.
>>>>>>>> >
>>>>>>>> > BTV. Some similar filtering is already done in the
old account
console.
>>>>>>>> >
>>>>>>>> > It filtered the "bearerOnly" clients, but
it didn't filter
clients
>>>>>>>> > without baseURL . I think that baseUrl is not
mandatory field
for
>>>>>>>> > clients and IMO many clients don't have it
configured, so not
sure
>>>>>>>> > whether to filter based on that...
>>>>>>>> >
>>>>>>>> > In addition to that you need always display clients
with
offline-access
>>>>>>>> > and with granted consent. The old account console
allowed on the
>>>>>>>> > "Applications" page to see and revoke
granted consents of
clients and it
>>>>>>>> > also allowed to see and revoke granted offline
tokens. So if
new account
>>>>>>>> > console doesn't have any other place to
view/revoke the
consents and
>>>>>>>> > offline tokens, it should be provided on this
page.
>>>>>>>> >
>>>>>>>> > However if you filter to see just clients with any
client role
+ clients
>>>>>>>> > with offline-access and granted consent, it may
create
interesting
>>>>>>>> > situations. For example imagine there is client,
which doesn't
have any
>>>>>>>> > client roles, but it has consent granted or offline
token
granted. Now
>>>>>>>> > user clicks the "revoke consent" (or
"revoke offline token")
button.
>>>>>>>> > This will cause that client will disappear from the
UI because
it
>>>>>>>> > doesn't have any client roles and it
doesn't have any consent
or offline
>>>>>>>> > access. This seems to me like quite confusing
behaviour
regarding UX?
>>>>>>>> > Also it will affect pagination results etc...
>>>>>>>> >
>>>>>>>> > With regards to this, I wonder if filtering
shouldn't be the
same as it
>>>>>>>> > was in old account console? This was that client
with
consentRequired
>>>>>>>> > were always included and clients with ANY role in
the token for
any
>>>>>>>> > client scope were always included. The details are
here:
>>>>>>>> >
https://github.com/keycloak/keycloak/blob/master/services/src/main/java/o...
>>>>>>>> >
>>>>>>>> > It is quite complex to compute if client has
permission to see
any
>>>>>>>> > single role. You need to make composite roles into
account etc.
Hence
>>>>>>>> > there is call to TokenManager.getAccess . The
performance of
this is not
>>>>>>>> > very great, however if you have pagination with
showing only 10
clients
>>>>>>>> > per page, it should be just fine to use this IMO.
>>>>>>>> >
>>>>>>>> > In shortcut: I suggest to use exactly same
filtering as done by
old
>>>>>>>> > account console. but add pagination support to it
(which wasn't
provided
>>>>>>>> > by old account console). Or alternatively, if new
account
console has
>>>>>>>> > separate page to manage offline tokens (which it
maybe should
have?)
>>>>>>>> > then filtering can be done to display clients
that:
>>>>>>>> >
>>>>>>>> > are NOT bearerOnly && (have consentRequired
OR have any client
role
>>>>>>>> > available).
>>>>>>>> >
>>>>>>>> > By "client role available", you may still
need to consider
composite
>>>>>>>> > roles, all possible client scopes etc, so the call
to
>>>>>>>> > "TokenManager.getAccess" will be still
needed.
>>>>>>>> >
>>>>>>>> > Marek
>>>>>>>> >
>>>>>>>> > >
>>>>>>>> > >> On Fri, 4 Oct 2019, 16:10 Stian
Thorgersen, <
sthorger(a)redhat.com
>>>>>>>> > >> <mailto:sthorger@redhat.com>>
wrote:
>>>>>>>> > >>
>>>>>>>> > >> My bad. I was thinking about comment
1, 2 and 3 from my
first reply.
>>>>>>>> > >>
>>>>>>>> > >> Let me re-read the whole thing again
;)
>>>>>>>> > >>
>>>>>>>> > >> On Fri, 4 Oct 2019, 15:42 Bruno
Oliveira, <
bruno(a)abstractj.org
>>>>>>>> > >>
<mailto:bruno@abstractj.org>> wrote:
>>>>>>>> > >>
>>>>>>>> > >> My comments were pretty much
based on the items you
mentioned:
>>>>>>>> > >>
>>>>>>>> > >> > 1) Limit the list to clients
that are
applications and that
>>>>>>>> > >> the user has access to (I
suggested a fairly simple
approach,
>>>>>>>> > >> which I believe should work)
>>>>>>>> > >>
>>>>>>>> > >> That wouldn't list the
clients regardless if the
user has
>>>>>>>> > >> access to
>>>>>>>> > >> them or not. So I'm not sure
where the security
issue is.
>>>>>>>> > >> Unless I'm
>>>>>>>> > >> missing something.
>>>>>>>> > >>
>>>>>>>> > >> > 2) Only list clients from
active sessions - then
add a
>>>>>>>> > >> follow-up for 1
>>>>>>>> > >> at some point in the future
>>>>>>>> > >> Yes, that's possible, but as
you mentioned
something to postpone
>>>>>>>> > >> unless badly needed. If we keep
increasing the
scope of what
>>>>>>>> > >> we aim,
>>>>>>>> > >> this may become an endless task.
>>>>>>>> > >>
>>>>>>>> > >> So here are my questions:
>>>>>>>> > >> - Are we in agreement that #1
should be part of our
>>>>>>>> > >> deliverable for
>>>>>>>> > >> the first release of the new
account console and #2
>>>>>>>> > >> implemented later?
>>>>>>>> > >> - If yes, are we ok about
postponing
pagination/filtering?
>>>>>>>> > >>
>>>>>>>> > >>
>>>>>>>> > >> On Fri, Oct 4, 2019 at 10:24 AM
Stian Thorgersen
>>>>>>>> > >> <sthorger(a)redhat.com
<mailto:sthorger@redhat.com>>
wrote:
>>>>>>>> > >> >
>>>>>>>> > >> > We're not on the same
page. #2 is absolutely not
redundant
>>>>>>>> > >> with #1. It is both a security
issue and a
usability issue to
>>>>>>>> > >> list all applications regardless
if the user has
access to
>>>>>>>> > >> them or not.
>>>>>>>> > >> >
>>>>>>>> > >> > One more not devices page
should not list
applications with
>>>>>>>> > >> offline access (offline sessions)
those should be
on app page
>>>>>>>> > >> (or a separate place?!?)
>>>>>>>> > >> >
>>>>>>>> > >> > On Fri, 4 Oct 2019, 14:49
Bruno Oliveira,
>>>>>>>> > >> <bruno(a)abstractj.org
<mailto:bruno@abstractj.org>>
wrote:
>>>>>>>> > >> >>
>>>>>>>> > >> >> I believe that we're
all in agreement that we
don't need
>>>>>>>> > >> pagination
>>>>>>>> > >> >> for the Applications
endpoint.
>>>>>>>> > >> >>
>>>>>>>> > >> >> And I have the same
impression as Stan, #1 makes
perfect
>>>>>>>> > >> sense and
>>>>>>>> > >> >> once it's done
should make #2 redundant. If we
are on the
>>>>>>>> > >> same page
>>>>>>>> > >> >> about this, I can
update
>>>>>>>> > >> >>
https://issues.jboss.org/browse/KEYCLOAK-5628.
>>>>>>>> > >> >>
>>>>>>>> > >> >> Another question is:
assuming that we implement
#1. Do we
>>>>>>>> > >> still need
>>>>>>>> > >> >> filtering (
https://issues.jboss.org/browse/KEYCLOAK-11534)?
>>>>>>>> > >> >>
>>>>>>>> > >> >>
>>>>>>>> > >> >> On Fri, Oct 4, 2019 at
8:59 AM Stian Thorgersen
>>>>>>>> > >> <sthorger(a)redhat.com
<mailto:sthorger@redhat.com>>
wrote:
>>>>>>>> > >> >> >
>>>>>>>> > >> >> > You can not have an
application page in the
new account
>>>>>>>> > >> console that lists every client
there is in a
realm. As I said
>>>>>>>> > >> a large portion of those will not
be actual
applications, and
>>>>>>>> > >> a portion will be applications
that the user does
not have
>>>>>>>> > >> access to.
>>>>>>>> > >> >> >
>>>>>>>> > >> >> > There's really
two choices here:
>>>>>>>> > >> >> >
>>>>>>>> > >> >> > 1) Limit the list
to clients that are actually
>>>>>>>> > >> applications and that the user
has access to (I
suggested a
>>>>>>>> > >> fairly simple approach, which I
believe should work)
>>>>>>>> > >> >> > 2) Only list
clients from active sessions -
then add a
>>>>>>>> > >> follow-up for 1 at some point in
the future
>>>>>>>> > >> >> >
>>>>>>>> > >> >> > My preference here
would be 1 for sure as if
this is done
>>>>>>>> > >> right it would be a good value
add for users to
have a place
>>>>>>>> > >> to discover available
applications.
>>>>>>>> > >> >> >
>>>>>>>> > >> >> > On Thu, 3 Oct 2019
at 11:54, Bruno Oliveira
>>>>>>>> > >> <bruno(a)abstractj.org
<mailto:bruno@abstractj.org>>
wrote:
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> On 2019-10-03,
Stian Thorgersen wrote:
>>>>>>>> > >> >> >> > Simply
returning all clients is not going
to work for
>>>>>>>> > >> a few reasons:
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > * It will
return clients that are not
applications/UIs
>>>>>>>> > >> >> >> > * It can
return applications the user
doesn't have
>>>>>>>> > >> access to
>>>>>>>> > >> >> >> > * There
can be thousands (in fact we know
about users
>>>>>>>> > >> with 10K+ clients)
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > That means
we need the following:
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > 1) Limit
clients returned by the REST
endpoint to only
>>>>>>>> > >> those that are
>>>>>>>> > >> >> >> > indeed
applications/UIs
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> That makes
sense, at the same time, not part
of our
>>>>>>>> > >> requirements into the
>>>>>>>> > >> >> >> Jira:
https://issues.jboss.org/browse/KEYCLOAK-5628.
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> Doug is working
on it, and if there's
anything that has
>>>>>>>> > >> to change, I'd
>>>>>>>> > >> >> >> suggest we
bring this up in the same Jira.
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> > 2) Limit
applications to those the user has
access to
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> Same as my
previous comment
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> > 3) Support
filtering and pagination (even
though 1 and
>>>>>>>> > >> 2 most likely will
>>>>>>>> > >> >> >> >
significantly reduce the number of
applications to 10s
>>>>>>>> > >> of applications, we
>>>>>>>> > >> >> >> > still need
to have pagination and filtering
support)
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> We have a Jira
for filtering, but not for
pagination.
>>>>>>>> > >> >> >> See:
https://issues.jboss.org/browse/KEYCLOAK-11534. But
>>>>>>>> > >> if you think
>>>>>>>> > >> >> >> pagination
should also be a part of it,
please let us
>>>>>>>> > >> know. Just keep in
>>>>>>>> > >> >> >> mind that this
is not part of our plans at
the moment.
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> Do you really
think we need to implement
pagination for
>>>>>>>> > >> Applications
>>>>>>>> > >> >> >> endpoint right
now? Based on the requirements
you
>>>>>>>> > >> described, I don't see
>>>>>>>> > >> >> >> a user with
2000 applications. Just look at
how many
>>>>>>>> > >> applications you
>>>>>>>> > >> >> >> have linked
into your GH or FB profile.
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> Maybe this is
something we could postpone?
Unless I'm
>>>>>>>> > >> missing something,
>>>>>>>> > >> >> >> I don't see
a real need to do it right now.
>>>>>>>> > >> >> >
>>>>>>>> > >> >> >
>>>>>>>> > >> >> > If you do 1 or 2
the list of applications
available to
>>>>>>>> > >> any given user will be reduced
significantly, so
I'm fairly
>>>>>>>> > >> confident that
pagination/filtering on the
server-side can be
>>>>>>>> > >> postponed in that case.
>>>>>>>> > >> >> >
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > Some ideas
on how we can achieve the above:
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > 1)
Figuring out what is indeed
applications/UIs
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > List
applications that are added to open
sessions,
>>>>>>>> > >> including the below:
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > * All OIDC
clients where: client.baseUrl !=
null &&
>>>>>>>> > >> !client.bearerOnly
>>>>>>>> > >> >> >> > * All SAML
clients where: client.baseUrl !=
null**
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > This will
make sure we only include
applications where
>>>>>>>> > >> the user can
>>>>>>>> > >> >> >> > actually
click on the application in the
list to go to
>>>>>>>> > >> the application.
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > ** Not
sure if there's anything in addition
to check
>>>>>>>> > >> for SAML
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > 2) Limit
applications to those the user has
access to
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > Not sure
about this one as we don't really
have an
>>>>>>>> > >> easy way to figure out
>>>>>>>> > >> >> >> > if a user
has access the an application or
not. One
>>>>>>>> > >> idea would be to only
>>>>>>>> > >> >> >> > include
clients where user has at least one
client
>>>>>>>> > >> role. Even if the
>>>>>>>> > >> >> >> >
application doesn't use client roles
directly a
>>>>>>>> > >> "dummy" role can be
created
>>>>>>>> > >> >> >> > for this
purpose by admins/developers.
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > 3)
Pagination and filtering
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > All
endpoints should support pagination and
filtering
>>>>>>>> > >> by design. Pagination
>>>>>>>> > >> >> >> > and
filtering should be server-side (REST
endpoint
>>>>>>>> > >> should provide according
>>>>>>>> > >> >> >> > to our
REST guidelines).
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> +1 for most of
the ideas, except for
implementing
>>>>>>>> > >> pagination right now.
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > On Wed, 2
Oct 2019 at 19:11, Stan Silvert
>>>>>>>> > >> <ssilvert(a)redhat.com
<mailto:ssilvert@redhat.com>>
wrote:
>>>>>>>> > >> >> >> >
>>>>>>>> > >> >> >> > >
Specifically, we need to discuss
filtering and
>>>>>>>> > >> pagination as it relates
>>>>>>>> > >> >> >> > > to
the "Applications" page:
>>>>>>>> > >> >> >> > >
>>>>>>>> > >> >> >> > >
https://marvelapp.com/c90dfi0/screen/59942290
>>>>>>>> > >> >> >> > >
>>>>>>>> > >> >> >> > > The
current design allows filtering by
name and
>>>>>>>> > >> application type.
>>>>>>>> > >> >> >> > >
>>>>>>>> > >> >> >> > >
However, Stian has pointed out that some
customers
>>>>>>>> > >> will have thousands
>>>>>>>> > >> >> >> > > of
clients. So this design might be
unworkable.
>>>>>>>> > >> >> >> > >
>>>>>>>> > >> >> >> > > I
don't want to go too far into the weeds
right now
>>>>>>>> > >> because I want to
>>>>>>>> > >> >> >> > >
understand the problem better first.
>>>>>>>> > >> >> >> > >
>>>>>>>> > >> >> >> > > What
is the use case when customers have
many, many
>>>>>>>> > >> clients?
>>>>>>>> > >> >> >> > >
>>>>>>>> > >> >> >> > > How
common is it to have many, many
clients for a
>>>>>>>> > >> single user?
>>>>>>>> > >> >> >> > >
>>>>>>>> > >> >> >> > > What
do those clients look like?
>>>>>>>> > >> >> >> > >
>>>>>>>> > >> >> >> > > What
could we use to filter on? The
information we
>>>>>>>> > >> currently have on
>>>>>>>> > >> >> >> > > the
client side looks something like what
you see here:
>>>>>>>> > >> >> >> > >
>>>>>>>> > >> >> >> > >
https://marvelapp.com/c90dfi0/screen/59942292
>>>>>>>> > >> >> >> > >
>>>>>>>> > >> >> >> > >
_______________________________________________
>>>>>>>> > >> >> >> > >
keycloak-dev mailing list
>>>>>>>> > >> >> >> > >
keycloak-dev(a)lists.jboss.org
>>>>>>>> > >>
<mailto:keycloak-dev@lists.jboss.org>
>>>>>>>> > >> >> >> > >
https://lists.jboss.org/mailman/listinfo/keycloak-dev
>>>>>>>> > >> >> >> >
_______________________________________________
>>>>>>>> > >> >> >> >
keycloak-dev mailing list
>>>>>>>> > >> >> >> >
keycloak-dev(a)lists.jboss.org
>>>>>>>> > >>
<mailto:keycloak-dev@lists.jboss.org>
>>>>>>>> > >> >> >> >
https://lists.jboss.org/mailman/listinfo/keycloak-dev
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> --
>>>>>>>> > >> >> >>
>>>>>>>> > >> >> >> abstractj
>>>>>>>> > >> >>
>>>>>>>> > >> >>
>>>>>>>> > >> >>
>>>>>>>> > >> >> --
>>>>>>>> > >> >> - abstractj
>>>>>>>> > >>
>>>>>>>> > >>
>>>>>>>> > >>
>>>>>>>> > >> --
>>>>>>>> > >> - abstractj
>>>>>>>> > >>
>>>>>>>> > >
_______________________________________________
>>>>>>>> > > keycloak-dev mailing list
>>>>>>>> > > keycloak-dev(a)lists.jboss.org
>>>>>>>> > >
https://lists.jboss.org/mailman/listinfo/keycloak-dev
>>>>>>>> >
>>>>>>>> >
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> - abstractj
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>
>
--
- abstractj