Thank you for such detailed explanation. In a result, just to check that my 
understanding is correct, can we say:
 
Principal is a subset of Subject, so Principal is an actor. However, as Shiro 
supports different security types, Shiro uses Principal as an actor’s 
identifying attribute for generic approach.
 
--
Best regards, Alex Orlov
>Среда, 4 ноября 2020, 18:37 +03:00 от Brian Demers <[email protected]>:
> 
>The SO answer looks pretty good to me, but it's pretty high level.  
>You also need to take into account how they are used in context and naming 
>conventions (e.g. Java has `java.security.principal`)
> 
>A principal could be any object, it's commonly a String, i.e. a username or 
>email address.  These may or may not be the identifier for the principal.  
>It's common for usernames and email addresses to change as the result of a 
>marriage or adoption, so another identifier might be used.
> 
>Another common case of an AuthenticationToken is Bearer tokens, 
>Shiro's Bearer token:  
>https://github.com/apache/shiro/blob/master/core/src/main/java/org/apache/shiro/authc/BearerToken.java
> . Is modeled as a string, but it is NOT a principal identifier, really it's 
>ONLY a credential.
> 
>A bearer token might be an opaque string, or it could be a security token 
>(e.g. a JWT/PASETO/etc), when the token is validated, it _might_ not contain 
>any identifier.
> 
>Similar to a certificate-based authentication, you might just have the cert as 
>an object and NOT a String.
> 
>In practice... when we talk about human users they often have some sort of 
>string identifier, because we naturally think username/password 
>authentication.  This is NOT universal though.
> 
> 
>Sorry for the rambling answer, I'm not sure If I've answered your question or 
>not.
>-Brian
>   
>On Wed, Nov 4, 2020 at 8:31 AM Alex Orlov < [email protected] > wrote:
>>Let me explain the reason of this the question.
>> 
>>From the SO asnwer ( https://stackoverflow.com/a/5025140/5057736 ):
>> 
>>"Principal - A subset of  subject that is represented by an account, role or 
>>other unique identifier. When we get to the level of implementation details, 
>>principals are the unique keys we use in access control lists. They may 
>>represent human users, automation, applications, connections, etc.
>>…
>>Subject/Object inherits from the same terms as used in grammar. In a sentence 
>>the subject is the actor and the object is the thing acted on. "
>> 
>>So, Principal is a subset of Subject → principal is an actor.
>> 
>>However, in Shiro A  Principal is any identifying attribute of an application 
>>user (Subject).
>> 
>>So, I try to understand: 1) The SO answer is wrong. 2) Shiro is wrong 3) I 
>>understand everything wrong.
>> 
>>if #2 then AuthenticationToken should be
>> 
>>public interface AuthenticationToken extends Serializable {
>>    public Object getPrincipalId();//added "Id"
>>    public Object getCredentials();
>>}
>> 
>> 
>> 
>>--
>>Best regards, Alex Orlov   
>>>Среда, 4 ноября 2020, 15:01 +03:00 от Benjamin Marwell < [email protected] 
>>>>:
>>> 
>>>Correct.
>>> 
>>>To complete the picture:
>>> 
>>>https://shiro.apache.org/terminology.html
>>> 
>>>Also, the PrincipalCollection knows which realms the user is known in. This 
>>>is why most methods return such a collection, not a single Principal.
>>> 
>>>Most apps only have one realm, but they could have multiple realms. E.g. 
>>>LDAP and a config file.
>>>
>>>
>>>     
>>>On Wed, 4 Nov 2020, 12:30 Andreas Reichel, < [email protected] 
>>>> wrote:
>>>> 
>>>> 
>>>> 
>>>>On Wed, 2020-11-04 at 13:07 +0300, Alex Orlov wrote:
>>>>>So, could anyone explain what is Principal — is it a User or User.getId()?
>>>>> 
>>>> 
>>>>Good afternoon Alex.
>>>> 
>>>>while I am just a Shiro user (but not a developer), my understanding is, 
>>>>that a Principal is anything you (or a service) can authenticate or 
>>>>authorize against.
>>>>Any entity, you can send to a service and get a response ( "yes" 
>>>>authenticated) for, is a principal.
>>>> 
>>>>The nature of this principal depends on the service itself.
>>>>If the authentication service expects a Username, then this Username is a 
>>>>Principal. But if the service expects a Global Unique Token, then this 
>>>>Username would not qualify as a Principal (but the Token would).
>>>> 
>>>>Cheers!
>>>>Andreas

Reply via email to