Безопасность микронавтов с OKTA - OAUTH 2.0

У меня есть конечная точка отдыха Micronaut, защищенная @Secured(SecurityRule.IS_AUTHENTICATED)

@Secured(SecurityRule.IS_AUTHENTICATED)
@Controller("/product")
@Secured({"Admin"})
public record ProductController(IProducer iProducer) {
    @Get(uri = "/{text}")
    public Single<String> get(String text){
        return iProducer.sendText(text);
    }
}

Я использую Validation with remote JWKS https://micronaut-projects.github.io/micronaut-security/latest/guide/#jwks

Application.yml

micronaut:
  security:
    enabled: true
    token:
      jwt:
        enabled: true
        signatures:
          jwks:
            okta:
              url: 'https://xxx-xxxxxx.okta.com/oauth2/default/v1/keys'

Декодировать JWT

{
  "jti": "AT.Y4r-Hu9ss5FXJRomosJlJRSGSsv4vscLeGI5seM2BJA",
  "iss": "https://dev-6271510.okta.com/oauth2/default",
  "aud": "api://default",
  "iat": 1608187083,
  "exp": 1608190683,
  "cid": "0oa2lezagQ4wrRUnW5d6",
  "uid": "00u2kavl6tQtJ7NNj5d6",
  "scp": [
    "openid"
  ],
  "sub": "[email protected]",
  "Admin": "[email protected]"
}

Вопросы

  1. Поскольку я использую валидацию с удаленным JWKS, это единственный способ проверить токен OKTA JWT. Как я могу проверить OKTA JWT без удаленного JWKS.
  2. В токене у меня есть требование ADMIN, как я могу защитить свой маршрут контроллера с помощью утверждения ADMIN. Я пробовал @Secured({"Admin"}), он дал мне 403 запрещенных
  3. Есть ли способ создать требование безопасности и обработчик для требования?

person San Jaisy    schedule 17.12.2020    source источник
comment
Я думаю, что часть того, что вы пытаетесь сделать, требует, чтобы вы использовали JWT в качестве токена-носителя. Для этого вашему приложению необходимо знать секрет, которым был подписан JWT. Это руководство (guides.micronaut.io/micronaut-oauth2-okta/guide /index.html) может немного помочь. В этом примере JWT создается при входе пользователя в Okta, это может быть во внешней службе, которая передает JWT в серверную службу для выполнения некоторой работы.   -  person Gavin    schedule 17.12.2020
comment
@Gavin - у меня не может быть входа в одно и то же приложение, интерфейс Angular выполняет вход в OKTA и запрашивает конечную конечную точку с токеном Bearer. Проверка JWT работает нормально, но у меня есть два маршрута внутри контроллера, оба маршрута должны работать на основе утверждения, есть ли способ создать требование безопасности и обработчик для каждого маршрута.   -  person San Jaisy    schedule 17.12.2020
comment
Извините, возможно, я не совсем понял, вам не нужно создание JWT в том же приложении. Чтобы иметь возможность декодировать JWT без вызова Okta, вам необходимо настроить секрет кодирования в свойствах Micronaut, как показано в указанной выше статье. Хотя в учебном пособии есть процедура входа в систему в том же приложении, этого не должно быть, просто для удобства продемонстрировать один метод интеграции с Okta.   -  person Gavin    schedule 17.12.2020
comment
@Gavin - Да, для меня это имеет смысл, проверка JWT сейчас работает нормально. Есть ли способ создать требование безопасности и обработчик для каждого маршрута контроллера на основе утверждения?   -  person San Jaisy    schedule 17.12.2020
comment
Должно быть, я с Микронавтом такого никогда не делал. Я бы заглянул в аннотацию Security, чтобы узнать, что там доступно, и, возможно, посмотрел бы, есть ли у Micronaut какие-либо фильтры безопасности в том же духе, что и Spring. Мой опыт работы с Micronaut показывает, что в целом он требует меньше усилий, чем Spring, поэтому я не удивлюсь, если они не найдут хороший способ сказать, что эта конечная точка требует утверждения x со значением y   -  person Gavin    schedule 17.12.2020
comment
Поскольку мне было любопытно, я немного погуглил, это ruuben.medium.com/, похоже, защищает конечные точки с помощью утверждений (ADMIN, ADMIN и? или? VIEW). Я не уверен, как утверждения извлекаются из JWT, глядя на предыдущую часть учебника, я думаю, что для утверждения roles требуется только jwt. Возможно, когда вы решите свою проблему, вы сможете дать здесь ответ? Удачи.   -  person Gavin    schedule 17.12.2020
comment
@Gavin спасибо за это, любые идеи по этой проблеме stackoverflow.com/questions/65338291/   -  person San Jaisy    schedule 17.12.2020
comment
@Gavin Я нашел блог blog.wick.technology/micronaut-security-rule для реализации настраиваемого правила безопасности, но по какой-то причине оно не работает, не знаю, почему stackoverflow.com/questions/65338291/   -  person San Jaisy    schedule 17.12.2020
comment
Извините, это выходит за рамки моего опыта. Я бы сказал, вам нужна индивидуальная претензия? не могли бы вы просто добавить роль к заявлению роли JWT?   -  person Gavin    schedule 17.12.2020