Skip to content

Commit fee80ce

Browse files
authored
[ServiceBus] Add a sample of authenticating with AzureNamedKeyCredential (Azure#22657)
* [ServiceBus] Add a sample of authenticating with AzureNamedKeyCredential - add sample - add a new auth rule and related env variables in test-resources.json - update sample.env to have the new env variables - use SERVICEBUS_HOSTNAME because the service endpoint contains https:// at the beginning and should not be sent to service.
1 parent eba5089 commit fee80ce

32 files changed

+849
-91
lines changed

sdk/servicebus/service-bus/sample.env

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Used in most samples. Retrieve these values from a service-bus namespace in the Azure Portal.
2-
SERVICEBUS_ENDPOINT="<service bus namespace>.servicebus.windows.net"
2+
SERVICEBUS_HOSTNAME="<service bus namespace>.servicebus.windows.net"
33
SERVICEBUS_CONNECTION_STRING="<connection string>"
44

55
# Used in most samples. Provide the name of a queue within the service bus namespace above.
@@ -15,6 +15,8 @@ TOPIC_FILTER_SUBSCRIPTION_1="<topic>"
1515
TOPIC_FILTER_SUBSCRIPTION_2="<topic>"
1616
TOPIC_FILTER_SUBSCRIPTION_3="<topic>"
1717

18+
SERVICEBUS_SAS_POLICY="<SAS policy name>"
19+
SERVICEBUS_SAS_KEY="<SAS key>"
1820
# Used to authenticate using Azure AD as a service principal for role-based authentication.
1921
#
2022
# Used only in the servicePrincipalLogin sample

sdk/servicebus/service-bus/samples-dev/usingAadAuth.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ dotenv.config();
3030

3131
// Define Service Bus Endpoint here and related entity names here
3232
const serviceBusEndpoint =
33-
process.env.SERVICEBUS_ENDPOINT || "<your-servicebus-namespace>.servicebus.windows.net";
33+
process.env.SERVICEBUS_HOSTNAME || "<your-servicebus-namespace>.servicebus.windows.net";
3434
const queueName = process.env.QUEUE_NAME || "<queue name>";
3535

3636
// Define CLIENT_ID, TENANT_ID and SECRET of your AAD application here
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT Licence.
3+
4+
/**
5+
* @summary This sample demonstrates how to authenticate using AzureNamedKeyCredential
6+
* @azsdk-weight 85
7+
*/
8+
9+
import { ServiceBusClient } from "@azure/service-bus";
10+
import { AzureNamedKeyCredential } from "@azure/core-auth";
11+
12+
// Load the .env file if it exists
13+
import * as dotenv from "dotenv";
14+
dotenv.config();
15+
16+
// Define Service Bus Endpoint here and related entity names here
17+
const serviceBusEndpoint =
18+
process.env.SERVICEBUS_HOSTNAME || "<your-servicebus-namespace>.servicebus.windows.net";
19+
const queueName = process.env.QUEUE_NAME || "<queue name>";
20+
21+
// Define SAS policy name and key here
22+
const sasPolicyName = process.env.SERVICEBUS_SAS_POLICY || "<SAS policy name>";
23+
const sasKey = process.env.SERVICEBUS_SAS_KEY || "<SAS key>";
24+
25+
export async function main() {
26+
const namedKeyCred = new AzureNamedKeyCredential(sasPolicyName, sasKey);
27+
const sbClient = new ServiceBusClient(serviceBusEndpoint, namedKeyCred);
28+
29+
/*
30+
Refer to other samples, and place your code here
31+
to create queue/subscription receivers.
32+
*/
33+
const sender = sbClient.createSender(queueName);
34+
35+
await sender.sendMessages({
36+
body: "using AzureNamedKeyCredential sample message",
37+
});
38+
39+
await sender.close();
40+
await sbClient.close();
41+
}
42+
43+
main().catch((err) => {
44+
console.log("usingNamedKeyCredential Sample - Error occurred: ", err);
45+
process.exit(1);
46+
});

sdk/servicebus/service-bus/samples/v7/javascript/README.md

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,27 @@ urlFragment: service-bus-javascript
1212

1313
These sample programs show how to use the JavaScript client libraries for Azure Service Bus in some common scenarios.
1414

15-
| **File Name** | **Description** |
16-
| ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
17-
| [sendMessages.js][sendmessages] | Demonstrates how to send messages to Service Bus Queue/Topic |
18-
| [receiveMessagesLoop.js][receivemessagesloop] | Demonstrates how to receive Service Bus messages in a loop |
19-
| [receiveMessagesStreaming.js][receivemessagesstreaming] | Demonstrates how to receive Service Bus messages in a stream |
20-
| [usingAadAuth.js][usingaadauth] | This sample how to create a namespace using AAD token credentials |
21-
| [browseMessages.js][browsemessages] | Demonstrates how to browse a Service Bus message |
22-
| [session.js][session] | Demonstrates how to send/receive messages to/from session enabled queues/subscriptions in Service Bus |
23-
| [scheduledMessages.js][scheduledmessages] | Demonstrates how to schedule messages to appear on a Service Bus Queue/Subscription at a later time |
24-
| [useProxy.js][useproxy] | This sample demonstrates how to create a ServiceBusClient meant to be used in an environment where outgoing network requests have to go through a proxy server |
25-
| [advanced/administrationClient.js][advanced_administrationclient] | Demonstrates how to manage the resources of a service bus namespace. |
26-
| [advanced/sessionRoundRobin.js][advanced_sessionroundrobin] | Demonstrates how to continually read through all the available sessions |
27-
| [advanced/deferral.js][advanced_deferral] | Demonstrates how to defer a message for later processing. |
28-
| [advanced/listingEntities.js][advanced_listingentities] | Demonstrates how the ServiceBusAdministrationClient can be used to list the entities of a service bus namespace |
29-
| [advanced/sessionState.js][advanced_sessionstate] | Demonstrates usage of SessionState. |
30-
| [advanced/movingMessagesToDLQ.js][advanced_movingmessagestodlq] | Demonstrates scenarios as to how a Service Bus message can be explicitly moved to the DLQ |
31-
| [advanced/processMessageFromDLQ.js][advanced_processmessagefromdlq] | Demonstrates retrieving a message from a dead letter queue, editing it and sending it back to the main queue |
15+
| **File Name** | **Description** |
16+
| ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
17+
| [sendMessages.js][sendmessages] | Demonstrates how to send messages to Service Bus Queue/Topic |
18+
| [topicSubscriptionWithRuleOperationsSample.js][topicsubscriptionwithruleoperationssample] | Demonstrates how to filter messages in Service Bus |
19+
| [receiveMessagesLoop.js][receivemessagesloop] | Demonstrates how to receive Service Bus messages in a loop |
20+
| [receiveMessagesStreaming.js][receivemessagesstreaming] | Demonstrates how to receive Service Bus messages in a stream |
21+
| [usingAadAuth.js][usingaadauth] | This sample how to create a namespace using AAD token credentials |
22+
| [usingNamedKeyCredential.js][usingnamedkeycredential] | This sample demonstrates how to authenticate using AzureNamedKeyCredential |
23+
| [browseMessages.js][browsemessages] | Demonstrates how to browse a Service Bus message |
24+
| [session.js][session] | Demonstrates how to send/receive messages to/from session enabled queues/subscriptions in Service Bus |
25+
| [scheduledMessages.js][scheduledmessages] | Demonstrates how to schedule messages to appear on a Service Bus Queue/Subscription at a later time |
26+
| [useProxy.js][useproxy] | This sample demonstrates how to create a ServiceBusClient meant to be used in an environment where outgoing network requests have to go through a proxy server |
27+
| [advanced/administrationClient.js][advanced_administrationclient] | Demonstrates how to manage the resources of a service bus namespace. |
28+
| [advanced/ruleManager.js][advanced_rulemanager] | Demonstrates how to manage subscription-level rules using RuleManager. |
29+
| [advanced/sessionRoundRobin.js][advanced_sessionroundrobin] | Demonstrates how to continually read through all the available sessions |
30+
| [advanced/deferral.js][advanced_deferral] | Demonstrates how to defer a message for later processing. |
31+
| [advanced/listingEntities.js][advanced_listingentities] | Demonstrates how the ServiceBusAdministrationClient can be used to list the entities of a service bus namespace |
32+
| [advanced/sessionState.js][advanced_sessionstate] | Demonstrates usage of SessionState. |
33+
| [advanced/movingMessagesToDLQ.js][advanced_movingmessagestodlq] | Demonstrates scenarios as to how a Service Bus message can be explicitly moved to the DLQ |
34+
| [advanced/processMessageFromDLQ.js][advanced_processmessagefromdlq] | Demonstrates retrieving a message from a dead letter queue, editing it and sending it back to the main queue |
35+
| [exceedMaxDeliveryCount.js][exceedmaxdeliverycount] | Demonstrates exceeding the max delivery count, then processing the messages sent to the dead letter queue |
3236

3337
## Prerequisites
3438

@@ -71,20 +75,24 @@ npx cross-env SERVICEBUS_CONNECTION_STRING="<servicebus connection string>" QUEU
7175
Take a look at our [API Documentation][apiref] for more information about the APIs that are available in the clients.
7276

7377
[sendmessages]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/sendMessages.js
78+
[topicsubscriptionwithruleoperationssample]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/topicSubscriptionWithRuleOperationsSample.js
7479
[receivemessagesloop]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/receiveMessagesLoop.js
7580
[receivemessagesstreaming]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/receiveMessagesStreaming.js
7681
[usingaadauth]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/usingAadAuth.js
82+
[usingnamedkeycredential]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/usingNamedKeyCredential.js
7783
[browsemessages]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/browseMessages.js
7884
[session]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/session.js
7985
[scheduledmessages]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/scheduledMessages.js
8086
[useproxy]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/useProxy.js
8187
[advanced_administrationclient]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/advanced/administrationClient.js
88+
[advanced_rulemanager]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/advanced/ruleManager.js
8289
[advanced_sessionroundrobin]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/advanced/sessionRoundRobin.js
8390
[advanced_deferral]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/advanced/deferral.js
8491
[advanced_listingentities]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/advanced/listingEntities.js
8592
[advanced_sessionstate]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/advanced/sessionState.js
8693
[advanced_movingmessagestodlq]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/advanced/movingMessagesToDLQ.js
8794
[advanced_processmessagefromdlq]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/advanced/processMessageFromDLQ.js
95+
[exceedmaxdeliverycount]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/servicebus/service-bus/samples/v7/javascript/exceedMaxDeliveryCount.js
8896
[apiref]: https://docs.microsoft.com/javascript/api/@azure/service-bus
8997
[freesub]: https://azure.microsoft.com/free/
9098
[createinstance_azureservicebus]: https://docs.microsoft.com/azure/service-bus-messaging

sdk/servicebus/service-bus/samples/v7/javascript/advanced/administrationClient.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
const { ServiceBusAdministrationClient } = require("@azure/service-bus");
1313

1414
// Load the .env file if it exists
15-
const dotenv = require("dotenv");
16-
dotenv.config();
15+
require("dotenv").config();
1716

1817
// Define connection string and related Service Bus entity names here
1918
const connectionString = process.env.SERVICEBUS_CONNECTION_STRING || "<connection string>";
@@ -56,3 +55,5 @@ main().catch((err) => {
5655
console.log("Administration Client Sample - Error occurred: ", err);
5756
process.exit(1);
5857
});
58+
59+
module.exports = { main };

sdk/servicebus/service-bus/samples/v7/javascript/advanced/deferral.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@
1616
const { ServiceBusClient, delay } = require("@azure/service-bus");
1717

1818
// Load the .env file if it exists
19-
const dotenv = require("dotenv");
20-
dotenv.config();
19+
require("dotenv").config();
2120

2221
// Define connection string and related Service Bus entity names here
2322
const connectionString = process.env.SERVICEBUS_CONNECTION_STRING || "<connection string>";
@@ -142,3 +141,5 @@ main().catch((err) => {
142141
console.log("Deferral Sample - Error occurred: ", err);
143142
process.exit(1);
144143
});
144+
145+
module.exports = { main };

sdk/servicebus/service-bus/samples/v7/javascript/advanced/listingEntities.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
const { ServiceBusAdministrationClient } = require("@azure/service-bus");
1212

1313
// Load the .env file if it exists
14-
const dotenv = require("dotenv");
15-
dotenv.config();
14+
require("dotenv").config();
1615

1716
// Define connection string and related Service Bus entity names here
1817
const connectionString = process.env.SERVICEBUS_CONNECTION_STRING || "<connection string>";
@@ -132,3 +131,5 @@ main().catch((err) => {
132131
console.log("Listing Entities Sample: ", err);
133132
process.exit(1);
134133
});
134+
135+
module.exports = { main };

sdk/servicebus/service-bus/samples/v7/javascript/advanced/movingMessagesToDLQ.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
const { ServiceBusClient } = require("@azure/service-bus");
1515

1616
// Load the .env file if it exists
17-
const dotenv = require("dotenv");
18-
dotenv.config();
17+
require("dotenv").config();
1918

2019
// Define connection string and related Service Bus entity names here
2120
const connectionString = process.env.SERVICEBUS_CONNECTION_STRING || "<connection string>";
@@ -76,3 +75,5 @@ main().catch((err) => {
7675
console.log("Moving Messages To DLQ Sample - Error occurred: ", err);
7776
process.exit(1);
7877
});
78+
79+
module.exports = { main };

sdk/servicebus/service-bus/samples/v7/javascript/advanced/processMessageFromDLQ.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
const { ServiceBusClient } = require("@azure/service-bus");
1616

1717
// Load the .env file if it exists
18-
const dotenv = require("dotenv");
19-
dotenv.config();
18+
require("dotenv").config();
2019

2120
// Define connection string and related Service Bus entity names here
2221
const connectionString = process.env.SERVICEBUS_CONNECTION_STRING || "<connection string>";
@@ -71,3 +70,5 @@ main().catch((err) => {
7170
console.log("Moving from DLQ Sample - Error occurred: ", err);
7271
process.exit(1);
7372
});
73+
74+
module.exports = { main };

0 commit comments

Comments
 (0)