Skip to content

Commit 78e4eb6

Browse files
authored
Merge pull request #214600 from MicrosoftDocs/main
10/14 AM Publish
2 parents 6fbbbdb + 1979777 commit 78e4eb6

File tree

55 files changed

+368
-284
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+368
-284
lines changed

articles/active-directory/authentication/howto-authentication-temporary-access-pass.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ Users can bootstrap Passwordless methods in one of two ways:
2323
- Using existing Azure AD Multi-Factor Authentication methods
2424
- Using a Temporary Access Pass (TAP)
2525

26-
A Temporary Access Pass is a time-limited passcode issued by an admin that satisfies strong authentication requirements and can be used to onboard other authentication methods, including Passwordless ones such as Microsoft Authenticator or even Windows Hello.
26+
A Temporary Access Pass is a time-limited passcode that can be configured for multi or single use to allow users to onboard other authentication methods including passwordless methods such as Microsoft Authenticator, FIDO2 or Windows Hello for Business.
27+
2728
A Temporary Access Pass also makes recovery easier when a user has lost or forgotten their strong authentication factor like a FIDO2 security key or Microsoft Authenticator app, but needs to sign in to register new strong authentication methods.
2829

2930
This article shows you how to enable and use a Temporary Access Pass in Azure AD using the Azure portal.

articles/active-directory/develop/tutorial-v2-javascript-spa.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ sampleApp/
159159
In the next steps you'll create a new folder for the JavaScript SPA, and set up the user interface (UI).
160160

161161
> [!TIP]
162-
> When you set up an Azure Active Directory (Azure AD) account, you create a tenant. This is a digital representation of your organization, and is primarily associated with a domain, like Microsoft.com. If you wish to learn how applications can work with multiple tenants, refer to the [application model](https://docs.microsoft.com/azure/active-directory/develop/application-model).
162+
> When you set up an Azure Active Directory (Azure AD) account, you create a tenant. This is a digital representation of your organization, and is primarily associated with a domain, like Microsoft.com. If you wish to learn how applications can work with multiple tenants, refer to the [application model](/articles/active-directory/develop/application-model.md).
163163
164164
## Create the SPA UI
165165

@@ -178,13 +178,12 @@ In the next steps you'll create a new folder for the JavaScript SPA, and set up
178178
<title>Quickstart | MSAL.JS Vanilla JavaScript SPA</title>
179179

180180
<!-- msal.js with a fallback to backup CDN -->
181-
<script type="text/javascript" src="https://alcdn.msauth.net/lib/1.2.1/js/msal.js" integrity="sha384-9TV1245fz+BaI+VvCjMYL0YDMElLBwNS84v3mY57pXNOt6xcUYch2QLImaTahcOP" crossorigin="anonymous"></script>
182-
<script type="text/javascript">
183-
if(typeof Msal === 'undefined')document.write(unescape("%3Cscript src='https://alcdn.msftauth.net/lib/1.2.1/js/msal.js' type='text/javascript' integrity='sha384-m/3NDUcz4krpIIiHgpeO0O8uxSghb+lfBTngquAo2Zuy2fEF+YgFeP08PWFo5FiJ' crossorigin='anonymous'%3E%3C/script%3E"));
184-
</script>
181+
<script src="https://alcdn.msauth.net/browser/2.30.0/js/msal-browser.js"
182+
integrity="sha384-L8LyrNcolaRZ4U+N06atid1fo+kBo8hdlduw0yx+gXuACcdZjjquuGZTA5uMmUdS"
183+
crossorigin="anonymous"></script>
185184

186185
<!-- adding Bootstrap 4 for UI components -->
187-
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
186+
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-o4ufwq3oKqc7IoCcR08YtZXmgOljhTggRwxP2CLbSqeXGtitAxwYaUln/05nJjit" crossorigin="anonymous">
188187
</head>
189188
<body>
190189
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
@@ -488,7 +487,7 @@ The `acquireTokenSilent` method handles token acquisition and renewal without an
488487
489488
## Call the Microsoft Graph API using the acquired token
490489

491-
1. In the *JavaScriptSPA* folder create a *.js* file named *graphConfig.js*, which stores the Representational State Transfer ([REST](https://docs.microsoft.com/rest/api/azure/)) endpoints. Add the following code:
490+
1. In the *JavaScriptSPA* folder create a *.js* file named *graphConfig.js*, which stores the Representational State Transfer ([REST](/rest/api/azure/)) endpoints. Add the following code:
492491

493492
```JavaScript
494493
const graphConfig = {

articles/active-directory/develop/tutorial-v2-nodejs-console.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ async function callApi(endpoint, accessToken) {
233233
console.log('request made to web API at: ' + new Date().toString());
234234

235235
try {
236-
const response = await axios.default.get(endpoint, options);
236+
const response = await axios.get(endpoint, options);
237237
return response.data;
238238
} catch (error) {
239239
console.log(error)

articles/active-directory/develop/tutorial-v2-react.md

Lines changed: 49 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -133,26 +133,24 @@ In the [Redirect URI: MSAL.js 2.0 with auth code flow](scenario-spa-app-registra
133133
import { msalConfig } from "./authConfig";
134134
```
135135

136-
1. Underneath the imports in *src/index.js* create a `PublicClientApplication` instance using the configuration from step 1.
136+
2. Underneath the imports in *src/index.js* create a `PublicClientApplication` instance using the configuration from step 1.
137137

138138
```javascript
139139
const msalInstance = new PublicClientApplication(msalConfig);
140140
```
141141

142-
1. Find the `<App />` component in *src/index.js* and wrap it in the `MsalProvider` component. Your render function should look like this:
142+
3. Find the `<App />` component in *src/index.js* and wrap it in the `MsalProvider` component. Your render function should look like this:
143143

144144
```jsx
145-
ReactDOM.render(
145+
root.render(
146146
<React.StrictMode>
147147
<MsalProvider instance={msalInstance}>
148148
<App />
149149
</MsalProvider>
150-
</React.StrictMode>,
151-
document.getElementById("root")
150+
</React.StrictMode>
152151
);
153152
```
154153

155-
156154
## Sign in users
157155

158156
Create a folder in *src* called *components* and create a file inside this folder named *SignInButton.jsx*. Add the code from either of the following sections to invoke login using a pop-up window or a full-frame redirect:
@@ -167,20 +165,22 @@ import { useMsal } from "@azure/msal-react";
167165
import { loginRequest } from "../authConfig";
168166
import Button from "react-bootstrap/Button";
169167

170-
function handleLogin(instance) {
171-
instance.loginPopup(loginRequest).catch(e => {
172-
console.error(e);
173-
});
174-
}
175168

176169
/**
177170
* Renders a button which, when selected, will open a popup for login
178171
*/
179172
export const SignInButton = () => {
180173
const { instance } = useMsal();
181174

175+
const handleLogin = (loginType) => {
176+
if (loginType === "popup") {
177+
instance.loginPopup(loginRequest).catch(e => {
178+
console.log(e);
179+
});
180+
}
181+
}
182182
return (
183-
<Button variant="secondary" className="ml-auto" onClick={() => handleLogin(instance)}>Sign in using Popup</Button>
183+
<Button variant="secondary" className="ml-auto" onClick={() => handleLogin("popup")}>Sign in using Popup</Button>
184184
);
185185
}
186186
```
@@ -195,20 +195,22 @@ import { useMsal } from "@azure/msal-react";
195195
import { loginRequest } from "../authConfig";
196196
import Button from "react-bootstrap/Button";
197197

198-
function handleLogin(instance) {
199-
instance.loginRedirect(loginRequest).catch(e => {
200-
console.error(e);
201-
});
202-
}
203198

204199
/**
205200
* Renders a button which, when selected, will redirect the page to the login prompt
206201
*/
207202
export const SignInButton = () => {
208203
const { instance } = useMsal();
209204

205+
const handleLogin = (loginType) => {
206+
if (loginType === "redirect") {
207+
instance.loginRedirect(loginRequest).catch(e => {
208+
console.log(e);
209+
});
210+
}
211+
}
210212
return (
211-
<Button variant="secondary" className="ml-auto" onClick={() => handleLogin(instance)}>Sign in using Redirect</Button>
213+
<Button variant="secondary" className="ml-auto" onClick={() => handleLogin("redirect")}>Sign in using Redirect</Button>
212214
);
213215
}
214216
```
@@ -244,7 +246,7 @@ export const SignInButton = () => {
244246
};
245247
```
246248

247-
2. Now open *src/App.js* and add replace the existing content with the following code:
249+
1. Now open *src/App.js* and add replace the existing content with the following code:
248250

249251
```jsx
250252
import React from "react";
@@ -280,20 +282,23 @@ import React from "react";
280282
import { useMsal } from "@azure/msal-react";
281283
import Button from "react-bootstrap/Button";
282284
283-
function handleLogout(instance) {
284-
instance.logoutPopup().catch(e => {
285-
console.error(e);
286-
});
287-
}
288-
289285
/**
290286
* Renders a button which, when selected, will open a popup for logout
291287
*/
292288
export const SignOutButton = () => {
293289
const { instance } = useMsal();
294290
291+
const handleLogout = (logoutType) => {
292+
if (logoutType === "popup") {
293+
instance.logoutPopup({
294+
postLogoutRedirectUri: "/",
295+
mainWindowRedirectUri: "/" // redirects the top level app after logout
296+
});
297+
}
298+
}
299+
295300
return (
296-
<Button variant="secondary" className="ml-auto" onClick={() => handleLogout(instance)}>Sign out using Popup</Button>
301+
<Button variant="secondary" className="ml-auto" onClick={() => handleLogout("popup")}>Sign out using Popup</Button>
297302
);
298303
}
299304
```
@@ -307,20 +312,22 @@ import React from "react";
307312
import { useMsal } from "@azure/msal-react";
308313
import Button from "react-bootstrap/Button";
309314
310-
function handleLogout(instance) {
311-
instance.logoutRedirect().catch(e => {
312-
console.error(e);
313-
});
314-
}
315-
316315
/**
317316
* Renders a button which, when selected, will redirect the page to the logout prompt
318317
*/
319318
export const SignOutButton = () => {
320319
const { instance } = useMsal();
320+
321+
const handleLogout = (logoutType) => {
322+
if (logoutType === "redirect") {
323+
instance.logoutRedirect({
324+
postLogoutRedirectUri: "/",
325+
});
326+
}
327+
}
321328
322329
return (
323-
<Button variant="secondary" className="ml-auto" onClick={() => handleLogout(instance)}>Sign out using Redirect</Button>
330+
<Button variant="secondary" className="ml-auto" onClick={() => handleLogout("redirect")}>Sign out using Redirect</Button>
324331
);
325332
}
326333
```
@@ -406,15 +413,15 @@ In order to render certain components only for authenticated or unauthenticated
406413
function ProfileContent() {
407414
const { instance, accounts, inProgress } = useMsal();
408415
const [accessToken, setAccessToken] = useState(null);
409-
416+
410417
const name = accounts[0] && accounts[0].name;
411-
418+
412419
function RequestAccessToken() {
413420
const request = {
414421
...loginRequest,
415422
account: accounts[0]
416423
};
417-
424+
418425
// Silently acquires an access token which is then attached to a request for Microsoft Graph data
419426
instance.acquireTokenSilent(request).then((response) => {
420427
setAccessToken(response.accessToken);
@@ -424,7 +431,7 @@ In order to render certain components only for authenticated or unauthenticated
424431
});
425432
});
426433
}
427-
434+
428435
return (
429436
<>
430437
<h5 className="card-title">Welcome {name}</h5>
@@ -450,7 +457,7 @@ In order to render certain components only for authenticated or unauthenticated
450457

451458
1. Finally, add your new `ProfileContent` component as a child of the `AuthenticatedTemplate` in your `App` component in *src/App.js*. Your `App` component should look like this:
452459

453-
```javascript
460+
```jsx
454461
function App() {
455462
return (
456463
<PageLayout>
@@ -538,15 +545,15 @@ If you're using Internet Explorer, we recommend that you use the `loginRedirect`
538545
function ProfileContent() {
539546
const { instance, accounts } = useMsal();
540547
const [graphData, setGraphData] = useState(null);
541-
548+
542549
const name = accounts[0] && accounts[0].name;
543-
550+
544551
function RequestProfileData() {
545552
const request = {
546553
...loginRequest,
547554
account: accounts[0]
548555
};
549-
556+
550557
// Silently acquires an access token which is then attached to a request for Microsoft Graph data
551558
instance.acquireTokenSilent(request).then((response) => {
552559
callMsGraph(response.accessToken).then(response => setGraphData(response));
@@ -556,7 +563,7 @@ If you're using Internet Explorer, we recommend that you use the `loginRedirect`
556563
});
557564
});
558565
}
559-
566+
560567
return (
561568
<>
562569
<h5 className="card-title">Welcome {name}</h5>

articles/active-directory/managed-identities-azure-resources/howto-assign-access-portal.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ After you've configured an Azure resource with a managed identity, you can give
3131

3232
## Use Azure RBAC to assign a managed identity access to another resource
3333

34+
>[!IMPORTANT]
35+
> The steps outlined below show is how you grant access to a service using Azure RBAC. Check specific service documentation on how to grant access - for example check Azure Data Explorer for instructions. Some Azure services are in the process of adopting Azure RBAC on the data plane
36+
3437
After you've enabled managed identity on an Azure resource, such as an [Azure VM](qs-configure-portal-windows-vm.md) or [Azure virtual machine scale set](qs-configure-portal-windows-vmss.md):
3538

3639
1. Sign in to the [Azure portal](https://portal.azure.com) using an account associated with the Azure subscription under which you have configured the managed identity.
10.2 KB
Loading
Binary file not shown.

articles/active-directory/saas-apps/zoom-provisioning-tutorial.md

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22
title: 'Tutorial: Configure Zoom for automatic user provisioning with Azure Active Directory | Microsoft Docs'
33
description: Learn how to automatically provision and de-provision user accounts from Azure AD to Zoom.
44
services: active-directory
5+
documentationcenter: ''
56
author: twimmers
6-
writer: twimmers
7-
manager: CelesteDG
7+
writer: Thwimmer
8+
manager: beatrizd
9+
ms.assetid: d9bd44ed-2e9a-4a1b-b33c-cb9e9fe8ff47
810
ms.service: active-directory
911
ms.subservice: saas-app-tutorial
1012
ms.workload: identity
13+
ms.devlang: na
1114
ms.topic: tutorial
1215
ms.date: 06/3/2019
1316
ms.author: thwimmer
@@ -41,18 +44,21 @@ The scenario outlined in this tutorial assumes that you already have the followi
4144

4245
## Step 2. Configure Zoom to support provisioning with Azure AD
4346

44-
1. Sign in to your [Zoom Admin Console](https://zoom.us/signin). Navigate to **Advanced > App Marketplace** in the left navigation pane.
47+
1. Sign in to your [Zoom Admin Console](https://zoom.us/signin). Navigate to **ADMIN > Advanced > App Marketplace** in the left navigation pane.
4548

46-
![Zoom Integrations](media/zoom-provisioning-tutorial/zoom01.png)
49+
![Screenshot of Zoom Integrations.](media/zoom-provisioning-tutorial/app-navigations.png)
4750

4851
2. Navigate to **Manage** in the top-right corner of the page.
4952

50-
![Screenshot of the Zoom App Marketplace with the Manage option called out.](media/zoom-provisioning-tutorial/zoom02.png)
53+
![Screenshot of the Zoom App Marketplace with the Manage option called out.](media/zoom-provisioning-tutorial/zoom-manage.png)
5154

5255
3. Navigate to your created Azure AD app.
5356

5457
![Screenshot of the Created Apps section with the Azure A D app called out.](media/zoom-provisioning-tutorial/zoom03.png)
5558

59+
> [!NOTE]
60+
> If you don't have an Azure AD app already created, then have a [JWT type Azure AD app](https://marketplace.zoom.us/docs/guides/build/jwt-app) created.
61+
5662
4. Select **App Credentials** in the left navigation pane.
5763

5864
![Screenshot of the left navigation pane with the App Credentials option highlighted.](media/zoom-provisioning-tutorial/zoom04.png)
@@ -147,7 +153,7 @@ Once you've configured provisioning, use the following resources to monitor your
147153

148154
## Change log
149155
* 05/14/2020 - Support for UPDATE operations added for emails[type eq "work"] attribute.
150-
* 10/20/2020 - Added support for two new roles "Licensed" and "On-Prem" to replace existing roles "Pro" and "Corp". Support for roles "Pro" and "Corp" will be removed in the future.
156+
* 10/20/2020 - Added support for two new roles "Licensed" and "on-premises" to replace existing roles "Pro" and "Corp". Support for roles "Pro" and "Corp" will be removed in the future.
151157

152158
## Additional resources
153159

articles/azure-functions/functions-dotnet-class-library.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ description: Understand how to use C# to develop and publish code as class libra
55
ms.topic: conceptual
66
ms.devlang: csharp
77
ms.custom: devx-track-csharp
8-
ms.date: 05/12/2022
8+
ms.date: 10/12/2022
99

1010
---
1111
# Develop C# class library functions using Azure Functions
@@ -67,7 +67,7 @@ This directory is what gets deployed to your function app in Azure. The binding
6767

6868
## Methods recognized as functions
6969

70-
In a class library, a function is a static method with a `FunctionName` and a trigger attribute, as shown in the following example:
70+
In a class library, a function is a method with a `FunctionName` and a trigger attribute, as shown in the following example:
7171

7272
```csharp
7373
public static class SimpleExample
@@ -82,7 +82,7 @@ public static class SimpleExample
8282
}
8383
```
8484

85-
The `FunctionName` attribute marks the method as a function entry point. The name must be unique within a project, start with a letter and only contain letters, numbers, `_`, and `-`, up to 127 characters in length. Project templates often create a method named `Run`, but the method name can be any valid C# method name.
85+
The `FunctionName` attribute marks the method as a function entry point. The name must be unique within a project, start with a letter and only contain letters, numbers, `_`, and `-`, up to 127 characters in length. Project templates often create a method named `Run`, but the method name can be any valid C# method name. The above example shows a static method being used, but functions aren't required to be static.
8686

8787
The trigger attribute specifies the trigger type and binds input data to a method parameter. The example function is triggered by a queue message, and the queue message is passed to the method in the `myQueueItem` parameter.
8888

0 commit comments

Comments
 (0)