Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
AI OnAI Off
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
Hi all,
we have an application that uses mixed authentication :
That is all working fine. For Cognito, we use emails as usernames, by specifing the
NameClaimType
to beClaimTypes.Email.
A new requirement has arrived, we need to support Apple Id. Integration with Cognito is quite easy and fairly similar to the other providers.
BUT, the Apple Signin allows the user to choose between :
Which means that if a user logs in with the first option and later logs in with the other option, although Cognito has only one record for that user, when it comes to login on to the website, two records are created, one for each email (the real one, and the generated one)
That makes sense as we use emails as usernames, and that when the security token from Cognito is validated, we run the following :
ServiceLocator.Current.GetInstance<ISynchronizingUserService>().SynchronizeAsync(ctx.AuthenticationTicket.Identity);
When decompiling the code, i can see that it uses the username property to find the correct user in the
tblSynchedUser
table, using thenetSynchedUserInsertOrUpdate
stored procedure.I guess I need to implement a custom
ISynchronizingUserService
, so that in case of an apple user, it could check another property than username to find the correct user (for instance cognito sends an UserId in the claims that is the same regardless of which email option is chosen by the user).I am a bit lost on how to do this, especially if i need to add some stored proc, as we are hosted on DXC-S, and have no access to the DB.
Thanks for your time reading, let me know if there is anyhting unclear.