Создание подтверждения маркеров владения для сменных ключей
Вы можете использовать методы addKey и removeKey, определенные в ресурсах application и servicePrincipal, для программной смены ключей с истекающим сроком действия.
В рамках подтверждения запроса для этих методов проверяется подтверждение владения существующего ключа перед вызовом этих методов. Подтверждение представляется в виде самозаверяющего маркера JWT. Маркер JWT должен быть подписан с использованием закрытого ключа одного из существующих действительных сертификатов приложения. Срок действия маркера не должен превышать 10 минут.
Примечание: Приложения, у которых нет существующих действительных сертификатов (сертификаты еще не добавлены или срок действия всех сертификатов истек), не могут использовать это действие службы. Чтобы вместо этого выполнить обновление, вы можете использовать операцию обновления приложения.
Маркер должен содержать следующие утверждения:
- aud: аудитория должна быть
00000002-0000-0000-c000-000000000000
. - iss: издатель должен быть идентификатором приложения или объекта servicePrincipal , который инициирует запрос.
- nbf: Не раньше времени.
- exp: время окончания срока действия должно иметь значение nbf + 10 минут.
Для создания этого подтверждения маркера владения можно использовать следующие примеры кода.
using System;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
using Microsoft.IdentityModel.Tokens;
using Microsoft.IdentityModel.JsonWebTokens;
namespace MicrosoftIdentityPlatformProofTokenGenerator
{
class Program
{
static void Main(string[] args)
{
// Configure the following
string pfxFilePath = "<Path to your certificate file";
string password = "<Certificate password>";
string objectId = "<id of the application or servicePrincipal object>";
// Get signing certificate
X509Certificate2 signingCert = new X509Certificate2(pfxFilePath, password);
// audience
string aud = $"00000002-0000-0000-c000-000000000000";
// aud and iss are the only required claims.
var claims = new Dictionary<string, object>()
{
{ "aud", aud },
{ "iss", objectId }
};
// token validity should not be more than 10 minutes
var now = DateTime.UtcNow;
var securityTokenDescriptor = new SecurityTokenDescriptor
{
Claims = claims,
NotBefore = now,
Expires = now.AddMinutes(10),
SigningCredentials = new X509SigningCredentials(signingCert)
};
var handler = new JsonWebTokenHandler();
var x = handler.CreateToken(securityTokenDescriptor);
Console.WriteLine(x);
}
}
}
Вы также можете создать подтверждение с помощью сигнатуры в Azure KeyVault. Важно отметить, что символ заполнения "=" не должен включаться в заголовок JWT и полезные данные, иначе будет возвращена ошибка Authentication_MissingOrMalformed .
Связанные материалы
Теперь, когда у вас есть подтверждение владения маркером, его можно использовать для выполнения следующего:
- Добавьте ключ или удалите ключ из приложения.
- Добавьте ключ или удалите ключ из субъекта-службы.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по