Skip to content

Commit ff1bf15

Browse files
Fix SSO+OBO flow issues for declarative agents: improve warnings, fix identifierUris, add redirect URIs
Agent-Logs-Url: https://github.com/OfficeDev/microsoft-365-agents-toolkit/sessions/b88f930d-aad3-4922-9191-d1d66283e283 Co-authored-by: HuihuiWu-Microsoft <73154171+HuihuiWu-Microsoft@users.noreply.github.com>
1 parent cbcde02 commit ff1bf15

9 files changed

Lines changed: 32 additions & 21 deletions

File tree

packages/fx-core/resource/package.nls.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1052,7 +1052,8 @@
10521052
"core.addAuthAction.validation.url": "Invalid URL format. Please enter a valid URL.",
10531053
"core.oauthScopeQuestion.validation.scope": "Invalid scope format. Please enter a valid scope. Samle: scope1: description for scope1; scope2: description for scope2",
10541054
"core.authNameQuestion.validation.empty": "Auth name cannot be empty.",
1055-
"driver.oauth.microsoftEntraWarning": "If you are using your own Microsoft Entra app, please: 1. Update the application id uri of your Microsoft Entra app to %s, 2. Add %s to redirect uri of your Microsoft Entra app.",
1055+
"driver.oauth.microsoftEntraWarning": "Microsoft Entra SSO configuration required for On-Behalf-Of (OBO) token exchange. If you are managing your Microsoft Entra app registration manually, please: 1. Set the Application ID URI to %s only — do not add additional identifier URIs as this breaks the OBO token exchange silently. 2. Add both %s and %s to the web redirect URIs of your app registration. Missing redirect URIs cause error 50011 during SSO. If using the toolkit-managed aad.manifest.json, these settings are configured automatically by the aadApp/update step.",
1056+
"driver.oauth.microsoftEntraOboInfo": "SSO+OBO flow configured with Application ID URI: %s. For the On-Behalf-Of exchange to succeed, ensure your Microsoft Entra app has: (a) only this Application ID URI set as identifierUri, (b) the access_as_user delegated scope defined, (c) Teams/Office client apps pre-authorized for that scope, and (d) the idtyp optional claim added to access tokens. If the OBO exchange fails silently, check Entra ID sign-in logs for errors such as 50011 (redirect URI mismatch).",
10561057
"core.addKnowledgeQuestion.webContent.title": "Web Content",
10571058
"core.addKnowledgeQuestion.webContent.placeholder": "Enter an absolute URL to a site to be searched for content.",
10581059
"core.addKnowledgeQuestion.invalidWebContent.message": "Invalid web content. Please provide a valid URL.",

packages/fx-core/src/component/driver/oauth/create.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { loadStateFromEnv } from "../util/utils";
2424
import { OauthNameTooLongError } from "./error/oauthNameTooLong";
2525
import { CreateOauthArgs } from "./interface/createOauthArgs";
2626
import { CreateOauthOutputs, OutputKeys } from "./interface/createOauthOutputs";
27-
import { defaultRedirectUri, logMessageKeys } from "./utility/constants";
27+
import { additionalRedirectUri, defaultRedirectUri, logMessageKeys } from "./utility/constants";
2828
import { OauthInfo, getAuthInfo, validateSecret, validateUrl } from "./utility/utility";
2929
import { OauthIdentityProviderInvalid } from "./error/oauthIdentityProviderInvalid";
3030

@@ -133,14 +133,20 @@ export class CreateOauthDriver implements StepDriver {
133133
oauthRegistrationRes.resourceIdentifierUri
134134
);
135135

136-
void context.ui!.showMessage(
137-
"warn",
136+
const warningMessage = getLocalizedString(
137+
logMessageKeys.microsoftEntraWarning,
138+
oauthRegistrationRes.resourceIdentifierUri,
139+
defaultRedirectUri,
140+
additionalRedirectUri
141+
);
142+
context.logProvider?.warning(warningMessage);
143+
void context.ui!.showMessage("warn", warningMessage, false);
144+
145+
context.logProvider?.info(
138146
getLocalizedString(
139-
logMessageKeys.microsoftEntraWarning,
140-
oauthRegistrationRes.resourceIdentifierUri,
141-
defaultRedirectUri
142-
),
143-
false
147+
logMessageKeys.microsoftEntraOboInfo,
148+
oauthRegistrationRes.resourceIdentifierUri
149+
)
144150
);
145151
}
146152

packages/fx-core/src/component/driver/oauth/utility/constants.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const logMessageKeys = {
1010
skipUpdateOauth: "driver.oauth.log.skipUpdateOauth",
1111
successUpdateOauth: "driver.oauth.log.successUpdateOauth",
1212
microsoftEntraWarning: "driver.oauth.microsoftEntraWarning",
13+
microsoftEntraOboInfo: "driver.oauth.microsoftEntraOboInfo",
1314
};
1415

1516
export const maxSecretLength = 512;
@@ -18,3 +19,6 @@ export const maxDomainPerOauth = 1;
1819

1920
export const defaultRedirectUri =
2021
"https://teams.microsoft.com/api/platform/v1.0/oAuthConsentRedirect";
22+
23+
export const additionalRedirectUri =
24+
"https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect";

templates/vs/csharp/declarative-agent-with-action-from-scratch-oauth/aad.manifest.json.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
"displayName": "{{appName}}-aad",
55
"identifierUris": [
66
{{#MicrosoftEntra}}
7-
"api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}",
87
"${{AADAUTHCODE_APPLICATION_ID_URI}}"
98
{{/MicrosoftEntra}}
109
{{^MicrosoftEntra}}
@@ -59,7 +58,8 @@
5958
"web": {
6059
"redirectUris": [
6160
{{#MicrosoftEntra}}
62-
"https://teams.microsoft.com/api/platform/v1.0/oAuthConsentRedirect"
61+
"https://teams.microsoft.com/api/platform/v1.0/oAuthConsentRedirect",
62+
"https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect"
6363
{{/MicrosoftEntra}}
6464
{{^MicrosoftEntra}}
6565
"https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect"

templates/vs/csharp/declarative-agent-with-action-from-scratch-oauth/appPackage/apiSpecificationFile/repair.yml.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ components:
1717
authorizationUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/authorize
1818
tokenUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/token
1919
scopes:
20-
api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}/repairs_read: Read repair records
20+
${{AADAUTHCODE_APPLICATION_ID_URI}}/repairs_read: Read repair records
2121
{{/MicrosoftEntra}}
2222
{{^MicrosoftEntra}}
2323
oAuth2AuthCode:
@@ -39,7 +39,7 @@ paths:
3939
security:
4040
{{#MicrosoftEntra}}
4141
- aadAuthCode:
42-
- api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}/repairs_read
42+
- ${{AADAUTHCODE_APPLICATION_ID_URI}}/repairs_read
4343
{{/MicrosoftEntra}}
4444
{{^MicrosoftEntra}}
4545
- oAuth2AuthCode:

templates/vsc/js/declarative-agent-with-action-from-scratch-oauth/aad.manifest.json.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
"displayName": "{{appName}}-aad",
55
"identifierUris": [
66
{{#MicrosoftEntra}}
7-
"api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}",
87
"${{AADAUTHCODE_APPLICATION_ID_URI}}"
98
{{/MicrosoftEntra}}
109
{{^MicrosoftEntra}}
@@ -59,7 +58,8 @@
5958
"web": {
6059
"redirectUris": [
6160
{{#MicrosoftEntra}}
62-
"https://teams.microsoft.com/api/platform/v1.0/oAuthConsentRedirect"
61+
"https://teams.microsoft.com/api/platform/v1.0/oAuthConsentRedirect",
62+
"https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect"
6363
{{/MicrosoftEntra}}
6464
{{^MicrosoftEntra}}
6565
"https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect"

templates/vsc/js/declarative-agent-with-action-from-scratch-oauth/appPackage/apiSpecificationFile/repair.yml.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ components:
1717
authorizationUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/authorize
1818
tokenUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/token
1919
scopes:
20-
api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}/repairs_read: Read repair records
20+
${{AADAUTHCODE_APPLICATION_ID_URI}}/repairs_read: Read repair records
2121
{{/MicrosoftEntra}}
2222
{{^MicrosoftEntra}}
2323
oAuth2AuthCode:
@@ -39,7 +39,7 @@ paths:
3939
security:
4040
{{#MicrosoftEntra}}
4141
- aadAuthCode:
42-
- api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}/repairs_read
42+
- ${{AADAUTHCODE_APPLICATION_ID_URI}}/repairs_read
4343
{{/MicrosoftEntra}}
4444
{{^MicrosoftEntra}}
4545
- oAuth2AuthCode:

templates/vsc/ts/declarative-agent-with-action-from-scratch-oauth/aad.manifest.json.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
"displayName": "{{appName}}-aad",
55
"identifierUris": [
66
{{#MicrosoftEntra}}
7-
"api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}",
87
"${{AADAUTHCODE_APPLICATION_ID_URI}}"
98
{{/MicrosoftEntra}}
109
{{^MicrosoftEntra}}
@@ -59,7 +58,8 @@
5958
"web": {
6059
"redirectUris": [
6160
{{#MicrosoftEntra}}
62-
"https://teams.microsoft.com/api/platform/v1.0/oAuthConsentRedirect"
61+
"https://teams.microsoft.com/api/platform/v1.0/oAuthConsentRedirect",
62+
"https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect"
6363
{{/MicrosoftEntra}}
6464
{{^MicrosoftEntra}}
6565
"https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect"

templates/vsc/ts/declarative-agent-with-action-from-scratch-oauth/appPackage/apiSpecificationFile/repair.yml.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ components:
1717
authorizationUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/authorize
1818
tokenUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/token
1919
scopes:
20-
api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}/repairs_read: Read repair records
20+
${{AADAUTHCODE_APPLICATION_ID_URI}}/repairs_read: Read repair records
2121
{{/MicrosoftEntra}}
2222
{{^MicrosoftEntra}}
2323
oAuth2AuthCode:
@@ -39,7 +39,7 @@ paths:
3939
security:
4040
{{#MicrosoftEntra}}
4141
- aadAuthCode:
42-
- api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}/repairs_read
42+
- ${{AADAUTHCODE_APPLICATION_ID_URI}}/repairs_read
4343
{{/MicrosoftEntra}}
4444
{{^MicrosoftEntra}}
4545
- oAuth2AuthCode:

0 commit comments

Comments
 (0)