Azure Event Grid-clients verifiëren met behulp van toegangssleutels of handtekeningen voor gedeelde toegang (preview)
Dit artikel bevat informatie over het verifiëren van clients voor Azure Event Namespace Topics, aangepaste onderwerpen, domeinen en 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 Om Microsoft Entra ID te gebruiken voor uw toepassingen.
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.
Voor naamruimteonderwerpen is dit bijvoorbeeld de manier waarop uw HTTP-aanvraag-URL eruit kan zien als een sleutel als parameter wordt doorgegeven.
https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>:publish?aeg-sas-key=XXXXXXXX53249XX8XXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==
Voor aangepaste onderwerpen, domeinen en partnernaamruimten moet de URL van uw HTTP-aanvraag er als volgt uitzien:
https://<yourtopic>.<region>.eventgrid.azure.net/api/events?aeg-sas-key=XXXXXXXX53249XX8XXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==
Shared Access Signatures
Shared Access Signatures (SAS) biedt toegangsbeheer over resources waarmee clients kunnen communiceren. Hier volgen enkele van de besturingselementen die u in een SAS kunt instellen:
- Stel een SAS-verlooptijd in. Deze waarde definieert effectief het interval waarvoor de SAS geldig is, kan worden gebruikt voor verificatie.
- De resource waarvoor een SAS kan worden gebruikt. SAS-token kan worden gemaakt voor toegang tot aangepaste onderwerpen, domeinen, partnernaamruimten en naamruimten. Als u een SAS maakt voor een aangepast onderwerp, domein of partnernaamruimte, kan een client deze gebruiken om gebeurtenissen naar een van deze resources te publiceren. Wanneer u een SAS voor naamruimteresources maakt, hebt u gedetailleerde controle over waartoe een client toegang heeft. Als u een SAS maakt waarvan de resource een naamruimte is, kan een client gebeurtenissen publiceren naar een naamruimteonderwerp in de naamruimte en gebeurtenissen ontvangen van elk gebeurtenisabonnement op een van de onderwerpen van de naamruimte. Op dezelfde manier kan een client, wanneer u een SAS voor een naamruimteonderwerp maakt, gebeurtenissen publiceren naar dat naamruimteonderwerp en gebeurtenissen ontvangen van elk gebeurtenisabonnement op dat onderwerp. Wanneer een SAS wordt gemaakt voor een gebeurtenisabonnement, kan de client gebeurtenissen ontvangen via dat gebeurtenisabonnement.
- Alleen clients die een geldige SAS presenteren, kunnen gegevens verzenden of ontvangen naar Event Grid.
Shared Access Signature-token
U kunt een SAS-token genereren dat moet worden opgenomen wanneer uw clienttoepassing communiceert met Event Grid. SAS-tokens voor Event Grid-resources zijn URL
gecodeerde tekenreeksen met de volgende indeling: r={resource}&e={expiration_utc}&s={signature}
{resource}
is de URL die de Event Grid-resource vertegenwoordigt waartoe de client toegang heeft.- De geldige URL-indeling voor aangepaste onderwerpen, domeinen en partnernaamruimten is
https://<yourtopic>.<region>.eventgrid.azure.net/api/events
. - De geldige indeling voor naamruimtebronnen is als volgt:
- Naamruimten:
https://<namespace-name>.<region>.eventgrid.azure.net
- Onderwerpen over naamruimten:
https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>
- Gebeurtenisabonnementen:
https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>/eventsubscriptions/<event_subscription_name>
- Naamruimten:
- De geldige URL-indeling voor aangepaste onderwerpen, domeinen en partnernaamruimten is
{expiration_utc}
is de URL van de SAS gecodeerde UTC-verlooptijd.{signature}
is de SHA-256-hash berekend via de resource-URI en de tekenreeksweergave van het token verloopt direct, gescheiden door CRLF. De hash-berekening lijkt op de volgende pseudocode en retourneert een hash-waarde van 256-bits/32-bytes.
SHA-256('https://<namespace_name>.eventgrid.azure.net/'+'\n'+ 1438205742)
Het token bevat de niet-hashwaarden, zodat de ontvanger (Event Grid) de hash opnieuw kan compileren met dezelfde parameters, waarbij wordt gecontroleerd of het token niet is gewijzigd (gegevensintegriteit).
Een SAS-token is geldig voor alle resources die zijn voorafgegaan door de resource-URI die wordt gebruikt in de handtekeningtekenreeks.
Als u alle ondersteunde API-versies wilt raadplegen wanneer u Event Grid gebruikt, raadpleegt u Microsoft.EventGrid-resourcetypen.
Verifiëren met behulp van SAS
Uw toepassing kan worden geverifieerd vóór een Event Grid-resource door een SAS-token te presenteren. Dit kan worden gedaan met behulp van de aeg-sas-token
header of de Authorization SharedAccessSignature
header met een HTTP-aanvraag. In de volgende secties wordt beschreven hoe u een SAS-token genereert en hoe u dit kunt gebruiken wanneer uw clienttoepassing HTTP-aanvragen verzendt of ontvangt (pull-levering).
SAS-token programmatisch genereren
In de volgende C#- en Python-voorbeelden ziet u hoe u een SAS-token maakt voor gebruik met Event Grid:
C#-voorbeeld
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;
}
}
Python-voorbeeld
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 een SAS-token als 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
In dit voorbeeld ziet u hoe u een SAS-token doorgeeft 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