#azure #azure-api-management
#azure #azure-api-management
Вопрос:
Мой проект использует службу управления api в качестве APIM azure.Я пытаюсь проверить утверждение с помощью политики продукта APIM.Если утверждение неверно, возвращает ошибку, в противном случае разрешает доступ к конечной точке.Моя политика такова
<policies> <inbound> <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
------------
------------
</validate-jwt>
<choose>
<when condition="@(context.Request.Method != "POST" amp;amp; ((Jwt)context.Request.Headers["Authorization"].Claims["role"]!= "Owner") amp;amp; (string)context.Api.Path =="/api/user">
<return-response>
<set-status code="403" reason="Forbidden" />
</return-response>
</when> </choose>
<base />
</inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </policies>
Но даже если роль не является владельцем, пользователь может получить доступ к пути / api / user
, как правильно проверить?
JWT calims are
"userrole": "[Owner,Admin]",
"email": "test@gmail.com"
Комментарии:
1. Если это вам поможет, пожалуйста, примите это как ответ.
Ответ №1:
В этом примере показано, как использовать политику проверки JWT для авторизации доступа к операциям на основе значения утверждений токена.
<validate-jwt header-name="Authorization" require-scheme="Bearer" output-token-variable-name="jwt">
<issuer-signing-keys>
<key>{{jwt-signing-key}}</key> <!-- signing key is stored in a named value -->
</issuer-signing-keys>
<audiences>
<audience>@(context.Request.OriginalUrl.Host)</audience>
</audiences>
<issuers>
<issuer>contoso.com</issuer>
</issuers>
<required-claims>
<claim name="userrole" match="any">
<value>Owner</value>
<value>Admin</value>
</claim>
</required-claims>
</validate-jwt>
<choose>
<when condition="@(context.Request.Method == "POST" amp;amp; !((Jwt)context.Variables["jwt"]).Claims["group"].Contains("Owner"))">
<return-response>
<set-status code="403" reason="Forbidden" />
</return-response>
</when>
</choose>
Для получения более подробной информации вы можете обратиться к этой статье.
Комментарии:
1. роль пользователя — это не одно значение . в заявке его строка, которая содержит «[Владелец, администратор]».требуется, чтобы calim принимал только точное совпадение, я прав?
2. что такое jwt-signing-key?
3. при получении ошибки не удается найти свойство ‘jwt-signing-key’
4. Список ключей безопасности в кодировке Base64, используемых для проверки подписанных токенов. Если у вас нет jwt-signing-key, вы можете удалить его, поскольку он не требуется.
5. Если вы хотите, чтобы владелец и администратор были как в токене для проверки, вы можете установить соответствие как
all