Итак, что я в конечном итоге сделал (конечно, не решение be-all-end-all), так это чтобы моя конечная точка Authenticate возвращала перечисленное в AuthenticationResultCode значение в ответе вместо простого логического значения pass / fail. Возможные значения для перечисления:
- ValidCredentials - пользователь прошел аутентификацию, и AuthenticationToken включен в ответ.
- InvalidCredentials - пользователь не прошел аутентификацию
- CredentialsExpired - пользователь прошел проверку подлинности, но срок действия его пароля истек. Мне еще предстоит определить, будет ли AuthToken включен в этот результат.
- NoCredentials - учетные данные не были предоставлены для запроса
Теперь у клиента есть больше информации о результате, чем значение прохождения / неудачи (которое я действительно никогда не проверял в любом случае), и я могу предпринять соответствующее действие в ответ, например, автоматическое отображение ChangePasswordDialog при получении CredentialsExpired.
Как я уже сказал, все еще выясняю, следует ли мне отправлять токен по истечении срока действия учетных данных, потому что я не хочу иметь возможность авторизовать пользователя, если срок его действия истек, но они уже были аутентифицированы один раз и я не думаю, что имеет смысл повторно аутентифицироваться после смены пароля (в конце концов, я должен пройти аутентификацию, чтобы я мог сменить пароль в первую очередь). Может быть, достаточно простого свойства IsLocked или IsExpired на клиенте ...