Azure Event Grid-publicatieclients verifiëren met behulp van toegangssleutels of handtekeningen voor gedeelde toegang
Dit artikel bevat informatie over het verifiëren van clients die gebeurtenissen publiceren naar Azure Event Grid-onderwerpen, domeinen, partnernaamruimten met behulp van een toegangssleutel of SAS-token (Shared Access Signature).
Belangrijk
- Het verifiëren en autoriseren van gebruikers of toepassingen met Behulp van Microsoft Entra-identiteiten biedt superieure beveiliging en gebruiksgemak ten opzichte van sas-verificatie (key-based and Shared Access Signatures). Met Microsoft Entra ID hoeft u geen geheimen op te slaan die worden gebruikt voor verificatie in uw code en potentiële beveiligingsproblemen te riskeren. We raden u ten zeerste aan Microsoft Entra ID te gebruiken met uw Azure Event Grid-toepassing voor het publiceren van gebeurtenissen. Zie Publicerende clients verifiëren met behulp van Microsoft Entra ID voor meer informatie.
- Microsoft Entra-verificatie wordt niet ondersteund voor naamruimteonderwerpen.
Verifiëren met behulp van toegangssleutel
Verificatie van toegangssleutels is de eenvoudigste vorm van verificatie. U kunt de toegangssleutel doorgeven als een HTTP-header of een URL-queryparameter.
Toegangssleutel in een HTTP-header
Geef de toegangssleutel door als een waarde voor de HTTP-header: aeg-sas-key
.
aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==
Toegangssleutel als queryparameter
U kunt ook opgeven aeg-sas-key
als een queryparameter.
https://<yourtopic>.<region>.eventgrid.azure.net/api/events?aeg-sas-key=XXXXXXXX53249XX8XXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==
Zie Toegangssleutels ophalen voor instructies voor het ophalen van toegangssleutels voor een onderwerp of domein.
Verifiëren met behulp van SAS
SAS-tokens voor een Event Grid-resource bevatten de resource, verlooptijd en een handtekening. De indeling van het SAS-token is: r={resource}&e={expiration}&s={signature}
.
De resource is het pad voor het Event Grid-onderwerp waarnaar u gebeurtenissen verzendt. Een geldig resourcepad is bijvoorbeeld: https://<yourtopic>.<region>.eventgrid.azure.net/api/events
. Zie Microsoft.EventGrid-resourcetypen voor alle ondersteunde API-versies.
Genereer eerst programmatisch een SAS-token en gebruik vervolgens de aeg-sas-token
header of Authorization SharedAccessSignature
header om te verifiëren met Event Grid.
SAS-token programmatisch genereren
In het volgende voorbeeld wordt een SAS-token gemaakt voor gebruik met Event Grid:
static string BuildSharedAccessSignature(string resource, DateTime expirationUtc, string key)
{
const char Resource = 'r';
const char Expiration = 'e';
const char Signature = 's';
string encodedResource = HttpUtility.UrlEncode(resource);
var culture = CultureInfo.CreateSpecificCulture("en-US");
var encodedExpirationUtc = HttpUtility.UrlEncode(expirationUtc.ToString(culture));
string unsignedSas = $"{Resource}={encodedResource}&{Expiration}={encodedExpirationUtc}";
using (var hmac = new HMACSHA256(Convert.FromBase64String(key)))
{
string signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(unsignedSas)));
string encodedSignature = HttpUtility.UrlEncode(signature);
string signedSas = $"{unsignedSas}&{Signature}={encodedSignature}";
return signedSas;
}
}
def generate_sas_token(uri, key, expiry=3600):
ttl = datetime.datetime.utcnow() + datetime.timedelta(seconds=expiry)
encoded_resource = urllib.parse.quote_plus(uri)
encoded_expiration_utc = urllib.parse.quote_plus(ttl.isoformat())
unsigned_sas = f'r={encoded_resource}&e={encoded_expiration_utc}'
signature = b64encode(HMAC(b64decode(key), unsigned_sas.encode('utf-8'), sha256).digest())
encoded_signature = urllib.parse.quote_plus(signature)
token = f'r={encoded_resource}&e={encoded_expiration_utc}&s={encoded_signature}'
return token
Aeg-sas-tokenheader gebruiken
Hier volgt een voorbeeld van het doorgeven van het SAS-token als een waarde voor de aeg-sas-token
header.
aeg-sas-token: r=https%3a%2f%2fmytopic.eventgrid.azure.net%2fapi%2fevents&e=6%2f15%2f2017+6%3a20%3a15+PM&s=XXXXXXXXXXXXX%2fBPjdDLOrc6THPy3tDcGHw1zP4OajQ%3d
Autorisatieheader gebruiken
Hier volgt een voorbeeld van het doorgeven van het SAS-token als een waarde voor de Authorization
header.
Authorization: SharedAccessSignature r=https%3a%2f%2fmytopic.eventgrid.azure.net%2fapi%2fevents&e=6%2f15%2f2017+6%3a20%3a15+PM&s=XXXXXXXXXXXXX%2fBPjdDLOrc6THPy3tDcGHw1zP4OajQ%3d
Volgende stappen
Zie Verificatie van gebeurtenislevering voor meer informatie over verificatie met gebeurtenis-handlers voor het leveren van gebeurtenissen.