The other week, Andy Dale wrote about a problem with claims. Pam Dingle added her thoughts.
As I read it, the perceived problem is that a relying party policy of just asking for a set of claims by name may not be enough. The relying party may still reject what it receives and force the user to try something else.
The attribute-based folk will say that the answer is that we need yet more attributes. I wonder who has a number in mind about how many attributes would be too many.
Pam's response seems to be some combination of this and role-based systems.
Over ten years ago, a paper was written by Winslett, Winsborough, and Seamons about credential acceptance policies. Granted, the context then was PKI client certificates, but it still addresses this problem. Just read "certificates" as "claims".
The answer proposed in this paper is essentially this. The relying party sends the client some code that it will use to determine if the claims will be accepted -- its acceptance policy. The client uses this code to determine which claims to send, sends them, and voila.
Now, here's the part where some folks will stop reading. The language used to communicate the relying party's policy is Prolog. The paper justifies this choice. One of the reasons of interest is this:
Prolog language features support using the same CAP implementation in these two ways. The bidirectionality of unification enables the same policy code to handle the case where the desired role is specified (server side) and the case where it is not (client side). The Prolog setof/3 meta-predicate enables the same policy code to be used on the client side to find all possible roles and supporting credentials and on the server side to determine whether the credentials submitted by the client authorize the role it has requested.
What I think is even more appropriate is that Prolog or logic programming is based on rules. Rules are, after all, how people think and write when describing policies.
So, what I have to say about this problem is this. The best approach is not attribute-based, it's not role-based, and it's not claims-based (sorry, Kim). The best approach is rule-based.
