diff --git a/IdAceCodeEditor.sln b/IdAceCodeEditor.sln index 2301311..5b54750 100644 --- a/IdAceCodeEditor.sln +++ b/IdAceCodeEditor.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.1.32228.430 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IdAceCodeEditor", "IdAceCodeEditor\IdAceCodeEditor.csproj", "{43C2BF53-26B0-4DF8-ADD3-C42F31DE4044}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IDAceCodeEditor", "IdAceCodeEditor\IDAceCodeEditor.csproj", "{43C2BF53-26B0-4DF8-ADD3-C42F31DE4044}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/IdAceCodeEditor/Config/appsettings.json b/IdAceCodeEditor/Config/appsettings.json index af31fe6..221e122 100644 --- a/IdAceCodeEditor/Config/appsettings.json +++ b/IdAceCodeEditor/Config/appsettings.json @@ -1,19 +1,20 @@ { "Frameworks": [ { - "Name": ".NETCORE", - "DisplayName": "ASP.NET Core", + "Name": "Asp.NetCore", + "DisplayName": "Asp.Net Core", + "Type": "Web", "Samples": [ { "Name": "Sign in users in webapp", - "Type": "ASP.NETCOREWEB", + "PlatformType": "Web", + "Type": "Asp.NetCore", "DisplayName": "An ASP.NET Core Web app signing-in users with the Microsoft identity platform in your organization", "WorkingFolder": "1-WebApp-OIDC\\1-1-MyOrg", "Tags": [ - { "Name": "Web App" }, - { "Name": "Asp.Net Core" }, - { "Name": "Identity.Web" }, - { "Name": "Auth Code Flow" } + { "Name": "SignIn" }, + { "Name": "Microsoft.Identity.Web" }, + { "Name": "HybridFlow" } ], "GitHubRepoSettings": { "ReadMeLink": "https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/1-WebApp-OIDC/1-1-MyOrg", @@ -94,13 +95,14 @@ }, { "Name": "Web app caling graph API", - "Type": "ASP.NETCOREWEB", + "PlatformType": "Web", + "Type": "Asp.NetCore", "DisplayName": "Enable your ASP.NET Core web app to sign in users and call Microsoft Graph with the Microsoft identity platform", "WorkingFolder": "2-WebApp-graph-user\\2-1-Call-MSGraph", "Tags": [ - { "Name": "Web App" }, - { "Name": "Asp.Net Core" }, - { "Name": "Identity.Web" }, + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "Microsoft.Identity.Web" }, { "Name": "Auth Code Flow" } ], "GitHubRepoSettings": { @@ -188,15 +190,132 @@ } ] }, + { + "Name": "Web app caling graph API(With Certificate)", + "PlatformType": "Web", + "Type": "Asp.NetCore", + "DisplayName": "Enable your ASP.NET Core web app to sign in users and call Microsoft Graph with the Microsoft identity platform(with Certificate)", + "WorkingFolder": "2-WebApp-graph-user\\2-6-Call-MSGraph - WithCert", + "Tags": [ + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "WithCertificate" }, + { "Name": "Microsoft.Identity.Web" }, + { "Name": "Auth Code Flow" } + ], + "GitHubRepoSettings": { + "ReadMeLink": "https://github.com/idaceappdev/active-directory-aspnetcore-webapp-openidconnect-v2/blob/master/2-WebApp-graph-user/2-6-Call-MSGraph%20-%20WithCert/README.md", + "TutorialLink": "https://github.com/AzureAD/microsoft-identity-web/wiki/Using-certificates", + "ClonePath": "https://github.com/idaceappdev/active-directory-aspnetcore-webapp-openidconnect-v2.git", + "LocalPath": "ASP.NETCORE\\CallMsGraph" + }, + "Projects": [ + { + "Name": "Client Project", + "ProjectPath": "2-WebApp-graph-user\\2-6-Call-MSGraph - WithCert", + "Order": "0", + "PortalSettings": { + "DisplayName": "WebApp-OpenIDConnect-DotNet-graph-v2", + "SignInAudience": "AzureADMyOrg", + "AppType": "Web", + "RedirectUri": "https://localhost:44321/signin-oidc", + "IsHybridFlow": "True", + "IsDeviceCodeFlow": "", + "SecretName": "", + "Certificate": { + "Type": "PemFile", // Values can be PfxFile,StoreWithThumbprint.StoreWithDN + "CertName": "TestCert.crt", + "PemName": "TestCert.pem", + "PfxName": "TestCert.pfx", + "Password": "password!", + "IsAddToStore": false, + "Issuer": "TestIssuer", + "Subject": "TestSubject" + }, + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", + "Type": "Scope" + } + ] + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "ClientId", + "FileName": "appsettings.json" + }, + { + "Name": "TenantId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].TenantId", + "Destination": "TenantId", + "FileName": "appsettings.json" + }, + { + "Name": "Certificate", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Source": "persistdata:Projects[0].Certificate.PfxFile", + "Destination": "ClientCertificates:0:CertificateDiskPath", + "FileName": "appsettings.json" + }, + { + "Name": "password", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Source": "password!", + "Destination": "ClientCertificates:0:CertificatePassword", + "FileName": "appsettings.json" + }, + { + "Name": "Domain", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].Domain", + "Destination": "Domain", + "FileName": "appsettings.json" + } + ] + } + ], + "Prerequisites": [ + { + "Name": "VSCode", + "DownloadLink": "https://code.visualstudio.com/download" + }, + { + "Name": "DotNetCore", + "DownloadLink": "https://dotnet.microsoft.com/en-us/download/dotnet/3.1" + }, + { + "Name": "VisualStudio", + "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + } + ] + }, { "Name": "Webapp calling custom .NET core web API", - "Type": "ASP.NETCOREWEB", + "Type": "Asp.NetCore", + "PlatformType": "Web", "DisplayName": "How to secure an ASP.NET Core Web API with the Microsoft identity platform", "WorkingFolder": "4-WebApp-your-API\\4-1-MyOrg", "Tags": [ - { "Name": "Web App" }, - { "Name": "Asp.Net Core" }, - { "Name": "Identity.Web" }, + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "CallCustomApi" }, + { "Name": "Microsoft.Identity.Web" }, { "Name": "Auth Code Flow" } ], "GitHubRepoSettings": { @@ -366,41 +485,35 @@ "DownloadLink": "https://visualstudio.microsoft.com/downloads/" } ] - } - ] - }, - { - "Name": ".NET Framework", - "DisplayName": "ASP.NET framework", - "Samples": [ + }, { - "Name": "Sign in users in webapp", - "Type": "ASP.NETFRAMEWORK", - "DisplayName": "Sign in a user in an ASP.NET Web App with OpenID Connect and the Microsoft identity platform", - "WorkingFolder": "", + "Name": "Blazor Webapp calling custom ASP.NET core web API", + "Type": "Asp.NetCore", + "PlatformType": "Web", + "DisplayName": "Enable your Blazor Server to sign-in users and call Web API with the Microsoft identity platform", + "WorkingFolder": "WebApp-your-API\\MyOrg", "Tags": [ - { "Name": "Web App" }, - { "Name": "Asp.Net Framework" }, - { "Name": "OWIN" }, + { "Name": "SignIn" }, + { "Name": "CallCustomApi" }, + { "Name": "Microsoft.Identity.Web" }, { "Name": "Auth Code Flow" } ], "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/AzureAdQuickstarts/AppModelv2-WebApp-OpenIDConnect-DotNet", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-asp-webapp", - "ClonePath": "https://github.com/AzureADQuickStarts/AppModelv2-WebApp-OpenIDConnect-DotNet.git", - "LocalPath": "ASP.NETFramework\\SignIn" + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-blazor-server/tree/main/WebApp-your-API/MyOrg", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-blazor-server", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-blazor-server.git", + "LocalPath": "BlazorServer\\WebAppToAPI" }, "Projects": [ { - "Name": "Client Project", - "ProjectPath": "AppModelv2-WebApp-OpenIDConnect-DotNet", + "Name": "API Project", + "ProjectPath": "WebApp-your-API\\MyOrg\\Service", "Order": "0", "PortalSettings": { - "DisplayName": "Quickstart-AspNetWebApp", + "DisplayName": "ToDoListService-aspnetcore", "SignInAudience": "AzureADMyOrg", - "AppType": "Web", - "RedirectUri": "https://localhost:44368/", - "IsHybridFlow": "True", + "AppType": "Api", + "IsHybridFlow": "", "IsDeviceCodeFlow": "", "SecretName": "", @@ -409,74 +522,63 @@ "ResourceAppId": "00000003-0000-0000-c000-000000000000", "ResourceAccesss": [ { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", "Type": "Scope" } ] } + ], + "PermissionScopes": [ + { + "Value": "access_as_user", + "Type": "User", + "AdminConsentDisplayName": "Access ToDoListService-aspnetcore", + "UserConsentDisplayName": "Access ToDoListService-aspnetcore", + "AdminConsentDescription": "Allows the app to access ToDoListService-aspnetcore as the signed-in user.", + "UserConsentDescription": "Allow the application to access ToDoListService-aspnetcore on your behalf." + } ] }, "ReplacementFields": [ { "Name": "ClientId", - "ReplacementType": "TXT", + "ReplacementType": "JSON", "Section": "AzureAd", "Format": "", "Source": "persistdata:Projects[0].App.AppId", - "Destination": "Enter_the_Application_Id_here", - "FileName": "web.config" + "Destination": "ClientId", + "FileName": "appsettings.json" }, { "Name": "TenantId", - "ReplacementType": "TXT", - "Section": "", + "ReplacementType": "JSON", + "Section": "AzureAd", "Format": "", "Source": "persistdata:Projects[0].TenantId", - "Destination": "common", - "FileName": "web.config" + "Destination": "TenantId", + "FileName": "appsettings.json" + }, + { + "Name": "Domain", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].Domain", + "Destination": "Domain", + "FileName": "appsettings.json" } ] - } - ], - "Prerequisites": [ - { - "Name": "DotNetFramework", - "DownloadLink": "https://docs.microsoft.com/en-us/dotnet/framework/install/guide-for-developers" }, - { - "Name": "VisualStudio", - "DownloadLink": "https://visualstudio.microsoft.com/downloads/" - } - ] - }, - { - "Name": "Web app caling graph API", - "Type": "ASP.NETFRAMEWORK", - "DisplayName": "Use OpenID Connect to sign in users to Microsoft identity platform and execute Microsoft Graph operations using incremental consent", - "WorkingFolder": "", - "Tags": [ - { "Name": "Web App" }, - { "Name": "Asp.Net Framework" }, - { "Name": "OWIN" }, - { "Name": "Auth Code Flow" } - ], - "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-aspnet-webapp-openidconnect", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-asp-webapp", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-aspnet-webapp-openidconnect.git", - "LocalPath": "ASP.NETFramework\\WebApp-Graph" - }, - "Projects": [ { "Name": "Client Project", - "ProjectPath": "WebApp", - "Order": "0", + "ProjectPath": "WebApp-your-API\\MyOrg\\Client", + "Order": "1", "PortalSettings": { - "DisplayName": "MailApp-openidconnect-v2", - "SignInAudience": "AzureADandPersonalMicrosoftAccount", + "DisplayName": "WebApp-calls-API-blazor-server", + "SignInAudience": "AzureADMyOrg", "AppType": "Web", - "RedirectUri": "https://localhost:44326/", - "IsHybridFlow": "", + "RedirectUri": "https://localhost:44318/signin-oidc", + "IsHybridFlow": "True", "IsDeviceCodeFlow": "", "SecretName": "mySecret", @@ -485,53 +587,928 @@ "ResourceAppId": "00000003-0000-0000-c000-000000000000", "ResourceAccesss": [ { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read - "Type": "Scope" - }, - { - "Id": "37f7f235-527c-4136-accd-4a02d197296e", //OpenId - "Type": "Scope" - }, - { - "Id": "14dad69e-099b-42c9-810b-d002981feec1", //profile - "Type": "Scope" - }, - { - "Id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182", //offline_access + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", "Type": "Scope" - }, + } + ] + + }, + { + "ResourceAppId": "persistdata:Projects[0].App.AppId", + "ResourceAccesss": [ { - "Id": "570282fd-fa5c-430d-a7fd-fc8dc98a9dca", //Mail.Read + "Id": "persistdata:Projects[0].PermissionScopes[0].Id", "Type": "Scope" } ] + } ] }, "ReplacementFields": [ { "Name": "ClientId", - "ReplacementType": "TXT", + "ReplacementType": "JSON", "Section": "AzureAd", - "Source": "persistdata:Projects[0].App.AppId", - "Destination": "[Enter your client ID, as obtained from the app registration portal]", - "FileName": "web.config" + "Source": "persistdata:Projects[1].App.AppId", + "Destination": "ClientId", + "FileName": "appsettings.json" + }, + { + "Name": "TenantId", + "Section": "AzureAd", + "ReplacementType": "JSON", + "Source": "persistdata:Projects[1].TenantId", + "Destination": "TenantId", + "FileName": "appsettings.json" + }, + { + "Name": "Domain", + "Section": "AzureAd", + "ReplacementType": "JSON", + "Source": "persistdata:Projects[1].Domain", + "Destination": "Domain", + "FileName": "appsettings.json" }, { "Name": "ClientSecret", - "ReplacementType": "TXT", - "Section": "", - "Source": "persistdata:Projects[0].SecretText", - "Destination": "[Enter your client secret, as obtained from the app registration portal]", - "FileName": "web.config" - } + "Section": "AzureAd", + "ReplacementType": "JSON", + "Source": "persistdata:Projects[1].SecretText", + "Destination": "ClientSecret", + "FileName": "appsettings.json" + }, + { + "Name": "TodoListScopes", + "Section": "TodoList", + "ReplacementType": "JSON", + "Format": "api://{0}/access_as_user", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "TodoListScope", + "FileName": "appsettings.json" + } + ] + } + ], + "Prerequisites": [ + { + "Name": "VSCode", + "DownloadLink": "https://code.visualstudio.com/download" + }, + { + "Name": "DotNetCore", + "DownloadLink": "https://dotnet.microsoft.com/en-us/download/dotnet/3.1" + }, + { + "Name": "VisualStudio", + "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + } + ] + }, + { + "Name": "SPA calling .NET core API", + "Type": "Asp.NetCore", + "PlatformType": "Web", + "DisplayName": "Angular single-page application using MSAL Angular to sign-in users with Azure Active Directory and call a .NET Core web API", + "WorkingFolder": "3-Authorization-II\\1-call-api", + "Tags": [ + { "Name": "SignIn" }, + { "Name": "CallCustomApi" }, + { "Name": "Microsoft.Identity.Web" }, + { "Name": "MSAL.Angular" }, + { "Name": "PKCE" } + ], + "GitHubRepoSettings": { + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-javascript-angular-tutorial/tree/main/3-Authorization-II/1-call-api", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/single-page-app-quickstart?pivots=devlang-angular", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-javascript-angular-tutorial.git", + "LocalPath": "Angular\\SpaCallingGraph" + }, + "Projects": [ + { + "Name": "API Project", + "ProjectPath": "3-Authorization-II\\1-call-api", + "Order": "0", + "PortalSettings": { + "DisplayName": "msal-dotnet-api", + "SignInAudience": "AzureADMyOrg", + "AppType": "Api", + "RedirectUri": "", + "IsHybridFlow": "", + "IsDeviceCodeFlow": "", + "SecretName": "", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", + "Type": "Scope" + } + ] + } + ], + "PermissionScopes": [ + { + "Value": "access_as_user", + "Type": "User", + "AdminConsentDisplayName": "Access msal-dotnet-api", + "UserConsentDisplayName": "Access msal-dotnet-api", + "AdminConsentDescription": "Allows the app to access msal-dotnet-api as the signed-in user", + "UserConsentDescription": "Allow the application to access msal-dotnet-api on your behalf." + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "ClientId", + "FileName": "API\\TodoListAPI\\appsettings.json" + }, + { + "Name": "TenantId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].TenantId", + "Destination": "TenantId", + "FileName": "API\\TodoListAPI\\appsettings.json" + }, + { + "Name": "Domain", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].Domain", + "Destination": "Domain", + "FileName": "API\\TodoListAPI\\appsettings.json" + } + ] + }, + { + "Name": "Client Project", + "ProjectPath": "3-Authorization-II\\1-call-api", + "Order": "1", + "PortalSettings": { + "DisplayName": "msal-angular-spa", + "SignInAudience": "AzureADMyOrg", + "AppType": "Spa", + "RedirectUri": "http://localhost:4200/", + "IsHybridFlow": "", + "IsDeviceCodeFlow": "", + "SecretName": "", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", + "Type": "Scope" + } + ] + }, + { + "ResourceAppId": "persistdata:Projects[0].App.AppId", + "ResourceAccesss": [ + { + "Id": "persistdata:Projects[0].PermissionScopes[0].Id", + "Type": "Scope" + } + ] + + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "TXT", + "Format": "", + "Source": "persistdata:Projects[1].App.AppId", + "Destination": "Enter_the_Application_Id_Here", + "FileName": "SPA\\src\\app\\auth-config.ts" + }, + { + "Name": "TenantId", + "ReplacementType": "TXT", + "Format": "", + "Source": "persistdata:Projects[1].TenantId", + "Destination": "Enter_the_Tenant_Info_Here", + "FileName": "SPA\\src\\app\\auth-config.ts" + }, + //{ + // "Name": "redirectURi", + // "ReplacementType": "TXT", + // "Format": "", + // "Source": "'https://localhost:4200/'", + // "Destination": "'/'", + // "FileName": "SPA\\src\\app\\auth-config.ts" + //}, + { + "Name": "ApiScope", + "ReplacementType": "TXT", + "Format": "api://{0}/access_as_user", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "Enter_the_Web_Api_Scope_here", + "FileName": "SPA\\src\\app\\auth-config.ts" + } + ] + } + ], + "Prerequisites": [ + { + "Name": "VSCode", + "DownloadLink": "https://code.visualstudio.com/download" + }, + { + "Name": "NPM", + "DownloadLink": "https://docs.npmjs.com/downloading-and-installing-node-js-and-npm" + } + ] + }, + { + "Name": "WPF app calling ASP.NET core API", + "Type": "Asp.NetCore", + "PlatformType": "Web", + "DisplayName": "Sign-in a user with the Microsoft Identity Platform in a WPF Desktop application and call an ASP.NET Core Web API", + "WorkingFolder": "1. Desktop app calls Web API", + "Tags": [ + { "Name": "SignIn" }, + { "Name": "CallCustomApi" }, + { "Name": "MSAL.NET" }, + { "Name": "Microsoft.Identity.Web" }, + { "Name": "WAM" }, + { "Name": "System browser" }, + { "Name": "PKCE" } + ], + "GitHubRepoSettings": { + "ReadMeLink": "https://github.com/Azure-Samples/active-directory-dotnet-native-aspnetcore-v2/blob/master/1.%20Desktop%20app%20calls%20Web%20API/README.md", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-windows-desktop", + "ClonePath": "https://github.com/Azure-Samples/active-directory-dotnet-native-aspnetcore-v2.git", + "LocalPath": "WPF\\CallCustomAPI" + }, + "Projects": [ + { + "Name": "API Project", + "ProjectPath": "1. Desktop app calls Web API\\TodoListService", + "Order": "0", + "PortalSettings": { + "DisplayName": "TodoListService", + "SignInAudience": "AzureADMyOrg", + "AppType": "Api", + "IsHybridFlow": "", + "IsDeviceCodeFlow": "", + "SecretName": "", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", + "Type": "Scope" + } + ] + } + ], + "PermissionScopes": [ + { + "Value": "access_as_user", + "Type": "User", + "AdminConsentDisplayName": "Access TodoListService (active-directory-dotnet-native-aspnetcore-v2)", + "UserConsentDisplayName": "Access TodoListService (active-directory-dotnet-native-aspnetcore-v2)", + "AdminConsentDescription": "Allows the app to access TodoListService (active-directory-dotnet-native-aspnetcore-v2) as the signed-in user.", + "UserConsentDescription": "Allow the application to access TodoListService (active-directory-dotnet-native-aspnetcore-v2) on your behalf." + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "ClientId", + "FileName": "appsettings.json" + }, + { + "Name": "Domain", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].Domain", + "Destination": "Domain", + "FileName": "appsettings.json" + } + ] + }, + { + "Name": "Client Project", + "ProjectPath": "1. Desktop app calls Web API\\TodoListClient", + "Order": "1", + "PortalSettings": { + "DisplayName": "TodoListClient", + "SignInAudience": "AzureADandPersonalMicrosoftAccount", + "AppType": "Desktop", + "RedirectUri": "http://localhost", + "IsHybridFlow": "", + "IsDeviceCodeFlow": "", + "SecretName": "", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "id": "b340eb25-3456-403f-be2f-af7a0d370277", + "Type": "Scope" + } + ] + }, + { + "ResourceAppId": "persistdata:Projects[0].App.AppId", + "ResourceAccesss": [ + { + "Id": "persistdata:Projects[0].PermissionScopes[0].Id", + "Type": "Scope" + } + ] + + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "TXT", + "Source": "persistdata:Projects[1].App.AppId", + "Destination": "[Enter_client_ID_Of_TodoListClient-v2_from_Azure_Portal,_e.g._784d7a5a-4a49-4d1d-b328-5812070f366f]", + "FileName": "App.config" + }, + { + "Name": "TodoListScopes", + "ReplacementType": "TXT", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "[Enter_client_ID_Of_TodoListService-v2_from_Azure_Portal,_e.g._2ec40e65-ba09-4853-bcde-bcb60029e596]", + "FileName": "App.config" + } + ] + } + ], + "Prerequisites": [ + { + "Name": "VSCode", + "DownloadLink": "https://code.visualstudio.com/download" + }, + { + "Name": "VisualStudio", + "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + } + ] + } + ] + }, + { + "Name": "Asp.NetFramework", + "Type": "Web", + "DisplayName": "ASP.NET framework", + "Samples": [ + { + "Name": "Sign in users in webapp", + "Type": "Asp.NetFramework", + "PlatformType": "Web", + "DisplayName": "Sign in a user in an ASP.NET Web App with OpenID Connect and the Microsoft identity platform", + "WorkingFolder": "", + "Tags": [ + { "Name": "SignIn" }, + { "Name": "Microsoft.Owin" }, + { "Name": "Hybridflow" } + ], + "GitHubRepoSettings": { + "ReadMeLink": "https://github.com/AzureAdQuickstarts/AppModelv2-WebApp-OpenIDConnect-DotNet", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-asp-webapp", + "ClonePath": "https://github.com/AzureADQuickStarts/AppModelv2-WebApp-OpenIDConnect-DotNet.git", + "LocalPath": "ASP.NETFramework\\SignIn" + }, + "Projects": [ + { + "Name": "Client Project", + "ProjectPath": "AppModelv2-WebApp-OpenIDConnect-DotNet", + "Order": "0", + "PortalSettings": { + "DisplayName": "Quickstart-AspNetWebApp", + "SignInAudience": "AzureADMyOrg", + "AppType": "Web", + "RedirectUri": "https://localhost:44368/", + "IsHybridFlow": "True", + "IsDeviceCodeFlow": "", + "SecretName": "", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Type": "Scope" + } + ] + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "TXT", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "Enter_the_Application_Id_here", + "FileName": "web.config" + }, + { + "Name": "TenantId", + "ReplacementType": "TXT", + "Section": "", + "Format": "", + "Source": "persistdata:Projects[0].TenantId", + "Destination": "common", + "FileName": "web.config" + } + ] + } + ], + "Prerequisites": [ + { + "Name": "DotNetFramework", + "DownloadLink": "https://docs.microsoft.com/en-us/dotnet/framework/install/guide-for-developers" + }, + { + "Name": "VisualStudio", + "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + } + ] + }, + { + "Name": "Web app caling graph API", + "Type": "Asp.NetFramework", + "PlatformType": "Web", + "DisplayName": "Use OpenID Connect to sign in users to Microsoft identity platform and execute Microsoft Graph operations using incremental consent", + "WorkingFolder": "", + "Tags": [ + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "Microsoft.Owin" }, + { "Name": "Auth Code Flow" } + ], + "GitHubRepoSettings": { + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-aspnet-webapp-openidconnect", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-asp-webapp", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-aspnet-webapp-openidconnect.git", + "LocalPath": "ASP.NETFramework\\WebApp-Graph" + }, + "Projects": [ + { + "Name": "Client Project", + "ProjectPath": "WebApp", + "Order": "0", + "PortalSettings": { + "DisplayName": "MailApp-openidconnect-v2", + "SignInAudience": "AzureADandPersonalMicrosoftAccount", + "AppType": "Web", + "RedirectUri": "https://localhost:44326/", + "IsHybridFlow": "", + "IsDeviceCodeFlow": "", + "SecretName": "mySecret", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Type": "Scope" + }, + { + "Id": "37f7f235-527c-4136-accd-4a02d197296e", //OpenId + "Type": "Scope" + }, + { + "Id": "14dad69e-099b-42c9-810b-d002981feec1", //profile + "Type": "Scope" + }, + { + "Id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182", //offline_access + "Type": "Scope" + }, + { + "Id": "570282fd-fa5c-430d-a7fd-fc8dc98a9dca", //Mail.Read + "Type": "Scope" + } + ] + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "TXT", + "Section": "AzureAd", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "[Enter your client ID, as obtained from the app registration portal]", + "FileName": "web.config" + }, + { + "Name": "ClientSecret", + "ReplacementType": "TXT", + "Section": "", + "Source": "persistdata:Projects[0].SecretText", + "Destination": "[Enter your client secret, as obtained from the app registration portal]", + "FileName": "web.config" + } + ] + } + ], + "Prerequisites": [ + { + "Name": "DotNetFramework", + "DownloadLink": "" + }, + { + "Name": "VisualStudio", + "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + } + ] + } + ] + }, + { + "Name": "BlazorServer", + "Type": "Web", + "DisplayName": "Blazor webapp", + "Samples": [ + { + "Name": "Sign In Users", + "Type": "BlazorServer", + "PlatformType": "Web", + "DisplayName": "Enable your Blazor WebAssembly to sign-in users with the Microsoft identity platform", + "WorkingFolder": "WebApp-OIDC\\MyOrg", + "Tags": [ + { "Name": "SignIn" }, + { "Name": "Microsoft.Identity.Web" }, + { "Name": "HybridFlow" } + ], + "GitHubRepoSettings": { + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-blazor-server/tree/main/WebApp-OIDC/MyOrg", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-blazor-server", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-blazor-server.git", + "LocalPath": "BlazorServer\\SignIn" + }, + "Projects": [ + { + "Name": "Client Project", + "ProjectPath": "WebApp-OIDC\\MyOrg", + "Order": "0", + "PortalSettings": { + "DisplayName": "WebApp-blazor-server", + "SignInAudience": "AzureADMyOrg", + "AppType": "Web", + "RedirectUri": "https://localhost:44318/ https://localhost:44318/signin-oidc", + "IsHybridFlow": "True", + "IsDeviceCodeFlow": "", + "SecretName": "", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Type": "Scope" + } + ] + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "ClientId", + "FileName": "blazorserver-singleOrg\\appsettings.json" + }, + { + "Name": "Domain", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Source": "persistdata:Projects[0].Domain", + "Destination": "Domain", + "FileName": "blazorserver-singleOrg\\appsettings.json" + }, + { + "Name": "TenantId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Source": "persistdata:Projects[0].TenantId", + "Destination": "TenantId", + "FileName": "blazorserver-singleOrg\\appsettings.json" + } + ] + } + ], + "Prerequisites": [ + { + "Name": "VSCode", + "DownloadLink": "https://code.visualstudio.com/download" + }, + { + "Name": "DotNetCore", + "DownloadLink": "https://dotnet.microsoft.com/en-us/download/dotnet/3.1" + }, + { + "Name": "VisualStudio", + "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + } + ] + }, + { + "Name": "Call Microsoft Graph", + "Type": "BlazorServer", + "PlatformType": "Web", + "DisplayName": "Call Microsoft Graph on behalf-of the signed-in users in your Blazor Server Application", + "WorkingFolder": "WebApp-graph-user\\Call-MSGraph", + "Tags": [ + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "Microsoft.Identity.Web" }, + { "Name": "Auth Code flow" } + ], + "GitHubRepoSettings": { + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-blazor-server/tree/main/WebApp-graph-user/Call-MSGraph", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-blazor-server", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-blazor-server.git", + "LocalPath": "BlazorServer\\WebAppGraph" + }, + "Projects": [ + { + "Name": "Client Project", + "ProjectPath": "WebApp-graph-user\\Call-MSGraph", + "Order": "0", + "PortalSettings": { + "DisplayName": "WebApp-blazor-server-graph", + "SignInAudience": "AzureADMyOrg", + "AppType": "Web", + "RedirectUri": "https://localhost:44318/ https://localhost:44318/signin-oidc", + "IsHybridFlow": "True", + "IsDeviceCodeFlow": "", + "SecretName": "mySecret", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Type": "Scope" + } + ] + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "ClientId", + "FileName": "blazorserver-calls-MS-graph\\appsettings.json" + }, + { + "Name": "Domain", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Source": "persistdata:Projects[0].Domain", + "Destination": "Domain", + "FileName": "blazorserver-calls-MS-graph\\appsettings.json" + }, + { + "Name": "TenantId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Source": "persistdata:Projects[0].TenantId", + "Destination": "TenantId", + "FileName": "blazorserver-calls-MS-graph\\appsettings.json" + }, + { + "Name": "ClientSecret", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Source": "persistdata:Projects[0].SecretText", + "Destination": "ClientSecret", + "FileName": "blazorserver-calls-MS-graph\\appsettings.json" + } + ] + } + ], + "Prerequisites": [ + { + "Name": "VSCode", + "DownloadLink": "https://code.visualstudio.com/download" + }, + { + "Name": "DotNetCore", + "DownloadLink": "https://dotnet.microsoft.com/en-us/download/dotnet/3.1" + }, + { + "Name": "VisualStudio", + "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + } + ] + }, + { + "Name": "Blazor Webapp calling custom ASP.NET core web API", + "Type": "BlazorServer", + "PlatformType": "Web", + "DisplayName": "Enable your Blazor Server to sign-in users and call Web API with the Microsoft identity platform", + "WorkingFolder": "WebApp-your-API\\MyOrg", + "Tags": [ + { "Name": "SignIn" }, + { "Name": "CallCustomApi" }, + { "Name": "Microsoft.Identity.Web" }, + { "Name": "Auth Code Flow" } + ], + "GitHubRepoSettings": { + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-blazor-server/tree/main/WebApp-your-API/MyOrg", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-blazor-server", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-blazor-server.git", + "LocalPath": "BlazorServer\\WebAppToAPI" + }, + "Projects": [ + { + "Name": "API Project", + "ProjectPath": "WebApp-your-API\\MyOrg\\Service", + "Order": "0", + "PortalSettings": { + "DisplayName": "ToDoListService-aspnetcore", + "SignInAudience": "AzureADMyOrg", + "AppType": "Api", + "IsHybridFlow": "", + "IsDeviceCodeFlow": "", + "SecretName": "", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", + "Type": "Scope" + } + ] + } + ], + "PermissionScopes": [ + { + "Value": "access_as_user", + "Type": "User", + "AdminConsentDisplayName": "Access ToDoListService-aspnetcore", + "UserConsentDisplayName": "Access ToDoListService-aspnetcore", + "AdminConsentDescription": "Allows the app to access ToDoListService-aspnetcore as the signed-in user.", + "UserConsentDescription": "Allow the application to access ToDoListService-aspnetcore on your behalf." + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "ClientId", + "FileName": "appsettings.json" + }, + { + "Name": "TenantId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].TenantId", + "Destination": "TenantId", + "FileName": "appsettings.json" + }, + { + "Name": "Domain", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Format": "", + "Source": "persistdata:Projects[0].Domain", + "Destination": "Domain", + "FileName": "appsettings.json" + } + ] + }, + { + "Name": "Client Project", + "ProjectPath": "WebApp-your-API\\MyOrg\\Client", + "Order": "1", + "PortalSettings": { + "DisplayName": "WebApp-calls-API-blazor-server", + "SignInAudience": "AzureADMyOrg", + "AppType": "Web", + "RedirectUri": "https://localhost:44318/signin-oidc", + "IsHybridFlow": "True", + "IsDeviceCodeFlow": "", + "SecretName": "mySecret", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", + "Type": "Scope" + } + ] + + }, + { + "ResourceAppId": "persistdata:Projects[0].App.AppId", + "ResourceAccesss": [ + { + "Id": "persistdata:Projects[0].PermissionScopes[0].Id", + "Type": "Scope" + } + ] + + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "JSON", + "Section": "AzureAd", + "Source": "persistdata:Projects[1].App.AppId", + "Destination": "ClientId", + "FileName": "appsettings.json" + }, + { + "Name": "TenantId", + "Section": "AzureAd", + "ReplacementType": "JSON", + "Source": "persistdata:Projects[1].TenantId", + "Destination": "TenantId", + "FileName": "appsettings.json" + }, + { + "Name": "Domain", + "Section": "AzureAd", + "ReplacementType": "JSON", + "Source": "persistdata:Projects[1].Domain", + "Destination": "Domain", + "FileName": "appsettings.json" + }, + { + "Name": "ClientSecret", + "Section": "AzureAd", + "ReplacementType": "JSON", + "Source": "persistdata:Projects[1].SecretText", + "Destination": "ClientSecret", + "FileName": "appsettings.json" + }, + { + "Name": "TodoListScopes", + "Section": "TodoList", + "ReplacementType": "JSON", + "Format": "api://{0}/access_as_user", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "TodoListScope", + "FileName": "appsettings.json" + } ] } ], "Prerequisites": [ { - "Name": "DotNetFramework", - "DownloadLink": "" + "Name": "VSCode", + "DownloadLink": "https://code.visualstudio.com/download" + }, + { + "Name": "DotNetCore", + "DownloadLink": "https://dotnet.microsoft.com/en-us/download/dotnet/3.1" }, { "Name": "VisualStudio", @@ -542,17 +1519,18 @@ ] }, { - "Name": "Java Spring", + "Name": "JavaSpring", + "Type": "Web", "DisplayName": "Java Spring", "Samples": [ { "Name": "Sign in users in webapp", - "Type": "Java Spring", + "Type": "JavaSpring", + "PlatformType": "Web", "DisplayName": "Enable your Java Spring Boot web app to sign in users on your Azure Active Directory tenant with the Microsoft identity platform", "WorkingFolder": "4. Spring Framework Web App Tutorial\\1-Authentication\\sign-in", "Tags": [ - { "Name": "Web App" }, - { "Name": "Java Spring" }, + { "Name": "SignIn" }, { "Name": "Spring Boot Starter" }, { "Name": "Auth Code Flow" } ], @@ -630,13 +1608,14 @@ ] }, { - "Name": "Sign in users in webapp", - "Type": "Java Spring", + "Name": "Sign in users in webapp an call Graph API", + "Type": "JavaSpring", + "PlatformType": "Web", "DisplayName": "Enable your Java Spring Boot web app to sign in users and call Microsoft Graph with the Microsoft identity platform", "WorkingFolder": "4. Spring Framework Web App Tutorial\\2-Authorization-I\\call-graph", "Tags": [ - { "Name": "Web App" }, - { "Name": "Java Spring" }, + { "Name": "SignIn" }, + { "Name": "CallGraph" }, { "Name": "Spring Boot Starter" }, { "Name": "Auth Code Flow" } ], @@ -716,46 +1695,223 @@ ] }, { - "Name": "Java Servlets", - "DisplayName": "Java Servlets", + "Name": "JavaServlet", + "Type": "Web", + "DisplayName": "Java Servlets", + "Samples": [ + { + "Name": "Sign in users in webapp", + "Type": "JavaServlet", + "PlatformType": "Web", + "DisplayName": "Enable your Java Servlet web app to sign in users to your Azure Active Directory tenant with the Microsoft identity platform", + "WorkingFolder": "3. Java Servlet Web App Tutorial\\1-Authentication\\sign-in", + "Tags": [ + { "Name": "SignIn" }, + { "Name": "Msal.Java" }, + { "Name": "Auth Code Flow" } + ], + "GitHubRepoSettings": { + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-msal-java-samples/tree/main/3.%20Java%20Servlet%20Web%20App%20Tutorial/1-Authentication/sign-in/README.md", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory?toc=%2Fazure%2Factive-directory%2Fdevelop%2Ftoc.json&bc=%2Fazure%2Factive-directory%2Fdevelop%2Fbreadcrumb%2Ftoc.json", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-msal-java-samples.git", + "LocalPath": "Servlet\\SignIn" + }, + "Projects": [ + { + "Name": "Client Project", + "ProjectPath": "3. Java Servlet Web App Tutorial\\1-Authentication\\sign-in", + "Order": "0", + "PortalSettings": { + "DisplayName": "java-servlet-webapp-authentication", + "SignInAudience": "AzureADMyOrg", + "AppType": "Web", + "RedirectUri": "http://localhost:8080/msal4j-servlet-auth/auth/redirect", + "IsHybridFlow": "", + "IsDeviceCodeFlow": "", + "SecretName": "appsecret", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Type": "Scope" + } + ] + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "TXT", + "Section": "", + "Format": "", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "{enter-your-client-id-here}", + "FileName": "src/main/resources/authentication.properties" + }, + { + "Name": "TenantId", + "ReplacementType": "TXT", + "Section": "", + "Format": "", + "Source": "persistdata:Projects[0].TenantId", + "Destination": "{enter-your-tenant-id-here}", + "FileName": "src/main/resources/authentication.properties" + }, + { + "Name": "ClientSecret", + "ReplacementType": "TXT", + "Section": "", + "Source": "persistdata:Projects[0].SecretText", + "Destination": "{enter-your-client-secret-here}", + "FileName": "src/main/resources/authentication.properties" + } + ] + } + ], + "Prerequisites": [ + { + "Name": "Java", + "DownloadLink": "https://www.oracle.com/java/technologies/downloads/" + }, + { + "Name": "VSCode", + "DownloadLink": "https://code.visualstudio.com/download" + } + ] + }, + { + "Name": "Sign in users in webapp and call graph", + "Type": "JavaServlet", + "PlatformType": "Web", + "DisplayName": "Enable your Java Servlet web app to sign in users and call Microsoft Graph with the Microsoft identity platform", + "WorkingFolder": "3. Java Servlet Web App Tutorial\\2-Authorization-I\\call-graph", + "Tags": [ + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "Msal.Java" }, + { "Name": "Auth Code Flow" } + ], + "GitHubRepoSettings": { + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-msal-java-samples/tree/main/3.%20Java%20Servlet%20Web%20App%20Tutorial/2-Authorization-I/call-graph/README.md", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory?toc=%2Fazure%2Factive-directory%2Fdevelop%2Ftoc.json&bc=%2Fazure%2Factive-directory%2Fdevelop%2Fbreadcrumb%2Ftoc.json", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-msal-java-samples.git", + "LocalPath": "Servlet\\CallGraph" + }, + "Projects": [ + { + "Name": "Client Project", + "ProjectPath": "3. Java Servlet Web App Tutorial\\2-Authorization-I\\call-graph", + "Order": "0", + "PortalSettings": { + "DisplayName": "java-servlet-webapp-call-graph", + "SignInAudience": "AzureADMyOrg", + "AppType": "Web", + "RedirectUri": "http://localhost:8080/msal4j-servlet-auth/auth/redirect", + "IsHybridFlow": "", + "IsDeviceCodeFlow": "", + "SecretName": "appsecret", + + "RequiredResourceAccesss": [ + { + "ResourceAppId": "00000003-0000-0000-c000-000000000000", + "ResourceAccesss": [ + { + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Type": "Scope" + } + ] + } + ] + }, + "ReplacementFields": [ + { + "Name": "ClientId", + "ReplacementType": "TXT", + "Section": "", + "Format": "", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "{enter-your-client-id-here}", + "FileName": "src/main/resources/authentication.properties" + }, + { + "Name": "TenantId", + "ReplacementType": "TXT", + "Section": "", + "Format": "", + "Source": "persistdata:Projects[0].TenantId", + "Destination": "{enter-your-tenant-id-here}", + "FileName": "src/main/resources/authentication.properties" + }, + { + "Name": "ClientSecret", + "ReplacementType": "TXT", + "Section": "", + "Source": "persistdata:Projects[0].SecretText", + "Destination": "{enter-your-client-secret-here}", + "FileName": "src/main/resources/authentication.properties" + } + ] + } + ], + "Prerequisites": [ + { + "Name": "Java", + "DownloadLink": "https://www.oracle.com/java/technologies/downloads/" + }, + { + "Name": "VSCode", + "DownloadLink": "https://code.visualstudio.com/download" + } + ] + } + ] + }, + { + "Name": "PythonFlask", + "Type": "Web", + "DisplayName": "Python", "Samples": [ { - "Name": "Sign in users in webapp", - "Type": "Java Servlets", - "DisplayName": "Enable your Java Servlet web app to sign in users to your Azure Active Directory tenant with the Microsoft identity platform", - "WorkingFolder": "3. Java Servlet Web App Tutorial\\1-Authentication\\sign-in", + "Name": "Sign in users in python flask web app", + "Type": "PythonFlask", + "PlatformType": "Web", + "DisplayName": "Enable your Python Flask webapp to sign in users to your Azure Active Directory tenant with the Microsoft identity platform", + "WorkingFolder": "", "Tags": [ - { "Name": "Web App" }, - { "Name": "Java Servlets" }, - { "Name": "Msal Java" }, + { "Name": "SignIn" }, + { "Name": "MSAL.Python" }, { "Name": "Auth Code Flow" } ], "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-msal-java-samples/tree/main/3.%20Java%20Servlet%20Web%20App%20Tutorial/1-Authentication/sign-in/README.md", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory?toc=%2Fazure%2Factive-directory%2Fdevelop%2Ftoc.json&bc=%2Fazure%2Factive-directory%2Fdevelop%2Fbreadcrumb%2Ftoc.json", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-msal-java-samples.git", - "LocalPath": "Servlet\\SignIn" + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-python-flask-webapp-authentication", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-python-token-cache-serialization", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-python-flask-webapp-authentication.git", + "LocalPath": "PythonFlask\\SignIn" }, "Projects": [ { "Name": "Client Project", - "ProjectPath": "3. Java Servlet Web App Tutorial\\1-Authentication\\sign-in", + "ProjectPath": "", "Order": "0", "PortalSettings": { - "DisplayName": "java-servlet-webapp-authentication", + "DisplayName": "python-flask-webapp-auth-my-tenant", "SignInAudience": "AzureADMyOrg", "AppType": "Web", - "RedirectUri": "http://localhost:8080/msal4j-servlet-auth/auth/redirect", + "RedirectUri": "https://127.0.0.1:5000/auth/redirect", "IsHybridFlow": "", "IsDeviceCodeFlow": "", - "SecretName": "appsecret", + "SecretName": "mysecret", "RequiredResourceAccesss": [ { "ResourceAppId": "00000003-0000-0000-c000-000000000000", "ResourceAccesss": [ { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", "Type": "Scope" } ] @@ -765,71 +1921,72 @@ "ReplacementFields": [ { "Name": "ClientId", - "ReplacementType": "TXT", - "Section": "", - "Format": "", + "ReplacementType": "JSON", + "Section": "client", "Source": "persistdata:Projects[0].App.AppId", - "Destination": "{enter-your-client-id-here}", - "FileName": "src/main/resources/authentication.properties" + "Destination": "client_id", + "FileName": "aad.config.json" }, { "Name": "TenantId", - "ReplacementType": "TXT", - "Section": "", - "Format": "", + "ReplacementType": "JSON", + "Section": "client", + "Format": "https://login.microsoftonline.com/{0}", "Source": "persistdata:Projects[0].TenantId", - "Destination": "{enter-your-tenant-id-here}", - "FileName": "src/main/resources/authentication.properties" + "Destination": "authority", + "FileName": "aad.config.json" }, { "Name": "ClientSecret", - "ReplacementType": "TXT", - "Section": "", + "ReplacementType": "JSON", + "Section": "client", + "Format": "", "Source": "persistdata:Projects[0].SecretText", - "Destination": "{enter-your-client-secret-here}", - "FileName": "src/main/resources/authentication.properties" + "Destination": "client_credential", + "FileName": "aad.config.json" } ] } ], "Prerequisites": [ - { - "Name": "Java", - "DownloadLink": "https://www.oracle.com/java/technologies/downloads/" - }, { "Name": "VSCode", "DownloadLink": "https://code.visualstudio.com/download" + }, + { + "Name": "Python", + "DownloadLink": "https://www.python.org/downloads/release/python-380/" } ] }, { - "Name": "Sign in users in webapp and call graph", - "Type": "Java Servlets", - "DisplayName": "Enable your Java Servlet web app to sign in users and call Microsoft Graph with the Microsoft identity platform", - "WorkingFolder": "3. Java Servlet Web App Tutorial\\2-Authorization-I\\call-graph", + "Name": "Python flask web app calling graph API", + "Type": "PythonFlask", + "PlatformType": "Web", + "DisplayName": "This sample demonstrates a Python web application calling a Microsoft Graph that is secured using Azure Active Directory.", + "WorkingFolder": "", "Tags": [ - { "Name": "Web App" }, - { "Name": "Java Servlets" }, - { "Name": "Msal Java" }, + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "MSAL Python" }, { "Name": "Auth Code Flow" } ], "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-msal-java-samples/tree/main/3.%20Java%20Servlet%20Web%20App%20Tutorial/2-Authorization-I/call-graph/README.md", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory?toc=%2Fazure%2Factive-directory%2Fdevelop%2Ftoc.json&bc=%2Fazure%2Factive-directory%2Fdevelop%2Fbreadcrumb%2Ftoc.json", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-msal-java-samples.git", - "LocalPath": "Servlet\\CallGraph" + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-python-webapp", + "TutorialLink": "https://docs.microsoft.com/en-us/samples/azure-samples/ms-identity-python-webapp/ms-identity-python-webapp/", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-python-webapp.git", + "LocalPath": "PythonFlask\\CallGraphAPI" }, "Projects": [ { "Name": "Client Project", - "ProjectPath": "3. Java Servlet Web App Tutorial\\2-Authorization-I\\call-graph", + "ProjectPath": "", "Order": "0", "PortalSettings": { - "DisplayName": "java-servlet-webapp-call-graph", - "SignInAudience": "AzureADMyOrg", + "DisplayName": "python-webapp", + "SignInAudience": "AzureADandPersonalMicrosoftAccount", "AppType": "Web", - "RedirectUri": "http://localhost:8080/msal4j-servlet-auth/auth/redirect", + "RedirectUri": "http://localhost:5000/getAToken", "IsHybridFlow": "", "IsDeviceCodeFlow": "", "SecretName": "appsecret", @@ -839,7 +1996,7 @@ "ResourceAppId": "00000003-0000-0000-c000-000000000000", "ResourceAccesss": [ { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "id": "b340eb25-3456-403f-be2f-af7a0d370277", "Type": "Scope" } ] @@ -850,86 +2007,78 @@ { "Name": "ClientId", "ReplacementType": "TXT", - "Section": "", - "Format": "", + "Section": "client", "Source": "persistdata:Projects[0].App.AppId", - "Destination": "{enter-your-client-id-here}", - "FileName": "src/main/resources/authentication.properties" - }, - { - "Name": "TenantId", - "ReplacementType": "TXT", - "Section": "", - "Format": "", - "Source": "persistdata:Projects[0].TenantId", - "Destination": "{enter-your-tenant-id-here}", - "FileName": "src/main/resources/authentication.properties" + "Destination": "Enter_the_Application_Id_here", + "FileName": "app_config.py" }, { "Name": "ClientSecret", "ReplacementType": "TXT", - "Section": "", + "Section": "client", + "Format": "", "Source": "persistdata:Projects[0].SecretText", - "Destination": "{enter-your-client-secret-here}", - "FileName": "src/main/resources/authentication.properties" + "Destination": "Enter_the_Client_Secret_Here", + "FileName": "app_config.py" } ] } ], "Prerequisites": [ - { - "Name": "Java", - "DownloadLink": "https://www.oracle.com/java/technologies/downloads/" - }, { "Name": "VSCode", "DownloadLink": "https://code.visualstudio.com/download" + }, + { + "Name": "Python", + "DownloadLink": "https://www.python.org/downloads/release/python-380/" } ] } ] }, { - "Name": "Blazor WASM", - "DisplayName": "Blazor Web Assemblies", + "Name": "NodeJs", + "Type": "Web", + "DisplayName": "Node.js", "Samples": [ { "Name": "Sign In Users", - "Type": "BlazorWASM", - "DisplayName": "Enable your Blazor WebAssembly to sign-in users with the Microsoft identity platform", - "WorkingFolder": "WebApp-OIDC\\MyOrg", + "Type": "NodeJs", + "PlatformType": "Web", + "DisplayName": "A Node.js & Express web app authenticating users against Azure AD with MSAL Nod", + "WorkingFolder": "1-Authentication\\1-sign-in", "Tags": [ - { "Name": "SPA" }, - { "Name": "Blazor WASM" }, - { "Name": "MSAL JS" }, - { "Name": "PKCE" } + { "Name": "SignIn" }, + { "Name": "Msal.NodeJs" }, + { "Name": "Auth Code Flow" } ], "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-blazor-wasm/blob/main/WebApp-OIDC/MyOrg/README.md", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-blazor-webassembly", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-blazor-wasm.git", - "LocalPath": "BlazorWASM\\SignIn" + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-javascript-nodejs-tutorial/blob/main/1-Authentication/1-sign-in/README.md", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-nodejs-webapp-msal", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-javascript-nodejs-tutorial.git", + "LocalPath": "NodeJS\\SignIn" }, "Projects": [ { "Name": "Client Project", - "ProjectPath": "WebApp-OIDC\\MyOrg", + "ProjectPath": "1-Authentication\\1-sign-in", "Order": "0", "PortalSettings": { - "DisplayName": "WebApp-blazor-wasm", + "DisplayName": "msal-node-webapp", "SignInAudience": "AzureADMyOrg", "AppType": "Web", - "RedirectUri": "https://localhost:44314/authentication/login-callback", - "IsHybridFlow": "True", + "RedirectUri": "http://localhost:4000/redirect", + "IsHybridFlow": "", "IsDeviceCodeFlow": "", - "SecretName": "", + "SecretName": "appsecret", "RequiredResourceAccesss": [ { "ResourceAppId": "00000003-0000-0000-c000-000000000000", "ResourceAccesss": [ { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", "Type": "Scope" } ] @@ -939,21 +2088,35 @@ "ReplacementFields": [ { "Name": "ClientId", - "ReplacementType": "JSON", - "Section": "AzureAd", + "ReplacementType": "TXT", "Format": "", "Source": "persistdata:Projects[0].App.AppId", - "Destination": "ClientId", - "FileName": "blazorwasm-singleOrg\\wwwroot\\appsettings.json" + "Destination": "Enter_the_Application_Id_Here", + "FileName": "App\\appSettings.js" }, { - "Name": "Authority", - "ReplacementType": "JSON", - "Section": "AzureAd", + "Name": "TenantId", + "ReplacementType": "TXT", + "Format": "", "Source": "persistdata:Projects[0].TenantId", - "Format": "https://login.microsoftonline.com/{0}", - "Destination": "Authority", - "FileName": "blazorwasm-singleOrg\\wwwroot\\appsettings.json" + "Destination": "Enter_the_Tenant_Info_Here", + "FileName": "App\\appSettings.js" + }, + { + "Name": "ClientSecret", + "ReplacementType": "TXT", + "Format": "", + "Source": "persistdata:Projects[0].SecretText", + "Destination": "Enter_the_Client_Secret_Here", + "FileName": "App\\appSettings.js" + }, + { + "Name": "ClientSecret", + "ReplacementType": "TXT", + "Format": "", + "Source": "persistdata:Projects[0].SecretText", + "Destination": "ENTER_YOUR_SECRET_HERE", + "FileName": "App\\app.js" } ] } @@ -964,75 +2127,96 @@ "DownloadLink": "https://code.visualstudio.com/download" }, { - "Name": "DotNetCore", - "DownloadLink": "https://dotnet.microsoft.com/en-us/download/dotnet/3.1" - }, - { - "Name": "VisualStudio", - "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + "Name": "NPM", + "DownloadLink": "https://docs.npmjs.com/downloading-and-installing-node-js-and-npm" } ] }, { - "Name": "Call Microsoft Graph", - "Type": "BlazorWasm", - "DisplayName": "Enable your Blazor WebAssembly to authorize users for calling Microsoft Graph", - "WorkingFolder": "", + "Name": "Call MS Graph", + "Type": "NodeJs", + "PlatformType": "Web", + "DisplayName": "A Node.js & Express web app calling Microsoft Graph using MSAL Node", + "WorkingFolder": "2-Authorization\\1-call-graph", "Tags": [ - { "Name": "SPA" }, - { "Name": "Blazor WASM" }, - { "Name": "MSAL JS" }, - { "Name": "PKCE" } + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "MSAL.NodeJs" }, + { "Name": "Auth Code Flow" } ], "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-blazor-wasm/blob/main/WebApp-graph-user/Call-MSGraph/README.md", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-blazor-webassembly", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-blazor-wasm.git", - "LocalPath": "BlazorWASM\\GraphAPI" + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-javascript-nodejs-tutorial/blob/main/2-Authorization/1-call-graph/README.md", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-nodejs-webapp-msal", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-javascript-nodejs-tutorial.git", + "LocalPath": "NodeJS\\CallGraph" }, "Projects": [ { "Name": "Client Project", - "ProjectPath": "WebApp-graph-user\\Call-MSGraph", + "ProjectPath": "2-Authorization\\1-call-graph", "Order": "0", "PortalSettings": { - "DisplayName": "WebApp-blazor-wasm-graph", + "DisplayName": "msal-node-webapp", "SignInAudience": "AzureADMyOrg", "AppType": "Web", - "RedirectUri": "https://localhost:44314/authentication/login-callback", - "IsHybridFlow": "True", + "RedirectUri": "http://localhost:4000/redirect", + "IsHybridFlow": "", "IsDeviceCodeFlow": "", - "SecretName": "", + "SecretName": "appsecret", "RequiredResourceAccesss": [ { "ResourceAppId": "00000003-0000-0000-c000-000000000000", "ResourceAccesss": [ { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", "Type": "Scope" } ] + }, + { + "resourceAppId": "797f4846-ba00-4fd7-ba43-dac1f8f63013", + "resourceAccess": [ + { + "id": "41094075-9dad-400e-a0bd-54e686782033", + "type": "Scope" + } + ] } ] }, "ReplacementFields": [ { "Name": "ClientId", - "ReplacementType": "JSON", - "Section": "AzureAd", + "ReplacementType": "TXT", + "Format": "", "Source": "persistdata:Projects[0].App.AppId", - "Destination": "ClientId", - "FileName": "blazorwasm-calls-MS-graph\\wwwroot\\appsettings.json" + "Destination": "Enter_the_Application_Id_Here", + "FileName": "App\\appSettings.js" }, { - "Name": "Authority", - "ReplacementType": "JSON", - "Section": "AzureAd", - "Format": "https://login.microsoftonline.com/{0}", + "Name": "TenantId", + "ReplacementType": "TXT", + "Format": "", "Source": "persistdata:Projects[0].TenantId", - "Destination": "Authority", - "FileName": "blazorwasm-calls-MS-graph\\wwwroot\\appsettings.json" + "Destination": "Enter_the_Tenant_Info_Here", + "FileName": "App\\appSettings.js" + }, + { + "Name": "ClientSecret", + "ReplacementType": "TXT", + "Format": "", + "Source": "persistdata:Projects[0].SecretText", + "Destination": "Enter_the_Client_Secret_Here", + "FileName": "App\\appSettings.js" + }, + { + "Name": "ClientSecret", + "ReplacementType": "TXT", + "Format": "", + "Source": "persistdata:Projects[0].SecretText", + "Destination": "ENTER_YOUR_SECRET_HERE", + "FileName": "App\\app.js" } ] } @@ -1043,49 +2227,41 @@ "DownloadLink": "https://code.visualstudio.com/download" }, { - "Name": "DotNetCore", - "DownloadLink": "https://dotnet.microsoft.com/en-us/download/dotnet/3.1" - }, - { - "Name": "VisualStudio", - "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + "Name": "NPM", + "DownloadLink": "https://docs.npmjs.com/downloading-and-installing-node-js-and-npm" } ] - } - ] - }, - { - "Name": "Blazor Server", - "DisplayName": "Blazor webapp", - "Samples": [ + }, { - "Name": "Sign In Users", - "Type": "BlazorServer", - "DisplayName": "Enable your Blazor WebAssembly to sign-in users with the Microsoft identity platform", - "WorkingFolder": "WebApp-OIDC\\MyOrg", + "Name": "React(SPA) calling NodeJS API", + "Type": "NodeJs", + "PlatformType": "Web", + "DisplayName": "A React single-page application using MSAL React to authorize users for calling a protected web API on Azure Active Directory", + "WorkingFolder": "3-Authorization-II\\1-call-api", "Tags": [ - { "Name": "Web App" }, - { "Name": "Blazor Server" }, - { "Name": "MSAL.Net" }, - { "Name": "Auth Code flow" } + { "Name": "SignIn" }, + { "Name": "CallCustomApi" }, + { "Name": "MSAL.React" }, + { "Name": "MSAL.Node" }, + { "Name": "PKCE" } ], "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-blazor-server/tree/main/WebApp-OIDC/MyOrg", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-blazor-server", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-blazor-server.git", - "LocalPath": "BlazorServer\\SignIn" + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-javascript-react-tutorial/tree/main/3-Authorization-II/1-call-api", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-react", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-javascript-react-tutorial.git", + "LocalPath": "React\\SpaCallinApi" }, "Projects": [ { - "Name": "Client Project", - "ProjectPath": "WebApp-OIDC\\MyOrg", + "Name": "API Project", + "ProjectPath": "3-Authorization-II\\1-call-api\\API", "Order": "0", "PortalSettings": { - "DisplayName": "WebApp-blazor-server", + "DisplayName": "msal-react-api", "SignInAudience": "AzureADMyOrg", - "AppType": "Web", - "RedirectUri": "https://localhost:44318/ https://localhost:44318/signin-oidc", - "IsHybridFlow": "True", + "AppType": "Api", + "RedirectUri": "", + "IsHybridFlow": "", "IsDeviceCodeFlow": "", "SecretName": "", @@ -1094,133 +2270,103 @@ "ResourceAppId": "00000003-0000-0000-c000-000000000000", "ResourceAccesss": [ { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", "Type": "Scope" } ] } + ], + "PermissionScopes": [ + { + "Value": "access_as_user", + "Type": "User", + "AdminConsentDisplayName": "Access msal-react-api", + "UserConsentDisplayName": "Access msal-react-api", + "AdminConsentDescription": "Allows the app to access msal-react-api as the signed-in user", + "UserConsentDescription": "Allow the application to access msal-react-api on your behalf." + } ] }, "ReplacementFields": [ { "Name": "ClientId", "ReplacementType": "JSON", - "Section": "AzureAd", + "Section": "credentials", "Format": "", "Source": "persistdata:Projects[0].App.AppId", - "Destination": "ClientId", - "FileName": "blazorserver-singleOrg\\appsettings.json" - }, - { - "Name": "Domain", - "ReplacementType": "JSON", - "Section": "AzureAd", - "Source": "persistdata:Projects[0].Domain", - "Destination": "Domain", - "FileName": "blazorserver-singleOrg\\appsettings.json" + "Destination": "clientID", + "FileName": "config.json" }, { "Name": "TenantId", "ReplacementType": "JSON", - "Section": "AzureAd", + "Section": "credentials", + "Format": "", "Source": "persistdata:Projects[0].TenantId", - "Destination": "TenantId", - "FileName": "blazorserver-singleOrg\\appsettings.json" + "Destination": "tenantID", + "FileName": "config.json" } ] - } - ], - "Prerequisites": [ - { - "Name": "VSCode", - "DownloadLink": "https://code.visualstudio.com/download" - }, - { - "Name": "DotNetCore", - "DownloadLink": "https://dotnet.microsoft.com/en-us/download/dotnet/3.1" }, - { - "Name": "VisualStudio", - "DownloadLink": "https://visualstudio.microsoft.com/downloads/" - } - ] - }, - { - "Name": "Call Microsoft Graph", - "Type": "BlazorServer", - "DisplayName": "Call Microsoft Graph on behalf-of the signed-in users in your Blazor Server Application", - "WorkingFolder": "WebApp-graph-user\\Call-MSGraph", - "Tags": [ - { "Name": "Web App" }, - { "Name": "Blazor Server" }, - { "Name": "MSAL.Net" }, - { "Name": "Auth Code flow" } - ], - "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-blazor-server/tree/main/WebApp-graph-user/Call-MSGraph", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-blazor-server", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-blazor-server.git", - "LocalPath": "BlazorServer\\WebAppGraph" - }, - "Projects": [ { "Name": "Client Project", - "ProjectPath": "WebApp-graph-user\\Call-MSGraph", - "Order": "0", + "ProjectPath": "3-Authorization-II\\1-call-api\\SPA", + "Order": "1", "PortalSettings": { - "DisplayName": "WebApp-blazor-server-graph", + "DisplayName": "msal-react-spa", "SignInAudience": "AzureADMyOrg", - "AppType": "Web", - "RedirectUri": "https://localhost:44318/ https://localhost:44318/signin-oidc", - "IsHybridFlow": "True", + "AppType": "Spa", + "RedirectUri": "http://localhost:3000/", + "IsHybridFlow": "", "IsDeviceCodeFlow": "", - "SecretName": "mySecret", + "SecretName": "", "RequiredResourceAccesss": [ { "ResourceAppId": "00000003-0000-0000-c000-000000000000", "ResourceAccesss": [ { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", + "Type": "Scope" + } + ] + }, + { + "ResourceAppId": "persistdata:Projects[0].App.AppId", + "ResourceAccesss": [ + { + "Id": "persistdata:Projects[0].PermissionScopes[0].Id", "Type": "Scope" } ] + } ] }, "ReplacementFields": [ { "Name": "ClientId", - "ReplacementType": "JSON", - "Section": "AzureAd", + "ReplacementType": "TXT", "Format": "", - "Source": "persistdata:Projects[0].App.AppId", - "Destination": "ClientId", - "FileName": "blazorserver-calls-MS-graph\\appsettings.json" - }, - { - "Name": "Domain", - "ReplacementType": "JSON", - "Section": "AzureAd", - "Source": "persistdata:Projects[0].Domain", - "Destination": "Domain", - "FileName": "blazorserver-calls-MS-graph\\appsettings.json" + "Source": "persistdata:Projects[1].App.AppId", + "Destination": "Enter_the_Application_Id_Here", + "FileName": "src\\authConfig.js" }, { "Name": "TenantId", - "ReplacementType": "JSON", - "Section": "AzureAd", - "Source": "persistdata:Projects[0].TenantId", - "Destination": "TenantId", - "FileName": "blazorserver-calls-MS-graph\\appsettings.json" + "ReplacementType": "TXT", + "Format": "", + "Source": "persistdata:Projects[1].TenantId", + "Destination": "Enter_the_Tenant_Info_Here", + "FileName": "src\\authConfig.js" }, { - "Name": "ClientSecret", - "ReplacementType": "JSON", - "Section": "AzureAd", - "Source": "persistdata:Projects[0].SecretText", - "Destination": "ClientSecret", - "FileName": "blazorserver-calls-MS-graph\\appsettings.json" + "Name": "ApiScope", + "ReplacementType": "TXT", + "Format": "api://{0}/access_as_user", + "Source": "persistdata:Projects[0].App.AppId", + "Destination": "Enter_the_Web_Api_Scope_Here", + "FileName": "src\\authConfig.js" } ] } @@ -1231,42 +2377,46 @@ "DownloadLink": "https://code.visualstudio.com/download" }, { - "Name": "DotNetCore", - "DownloadLink": "https://dotnet.microsoft.com/en-us/download/dotnet/3.1" - }, - { - "Name": "VisualStudio", - "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + "Name": "NPM", + "DownloadLink": "https://docs.npmjs.com/downloading-and-installing-node-js-and-npm" } ] - }, + } + ] + }, + { + "Name": "BlasorWasm", + "Type": "Spa", + "DisplayName": "Blazor Web Assemblies", + "Samples": [ { - "Name": "Blazor Webapp calling custom ASP.NET core web API", - "Type": "BlazorServer", - "DisplayName": "Enable your Blazor Server to sign-in users and call Web API with the Microsoft identity platform", - "WorkingFolder": "WebApp-your-API\\MyOrg", + "Name": "Sign In Users", + "Type": "BlasorWasm", + "PlatformType": "Spa", + "DisplayName": "Enable your Blazor WebAssembly to sign-in users with the Microsoft identity platform", + "WorkingFolder": "WebApp-OIDC\\MyOrg", "Tags": [ - { "Name": "Blazor Sever" }, - { "Name": "Asp.Net Core" }, - { "Name": "Identity.Web" }, - { "Name": "Auth Code Flow" } + { "Name": "SignIn" }, + { "Name": "Microsoft.Authentication.WebAssembly.Msal" }, + { "Name": "PKCE" } ], "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-blazor-server/tree/main/WebApp-your-API/MyOrg", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-blazor-server", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-blazor-server.git", - "LocalPath": "BlazorServer\\WebAppToAPI" + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-blazor-wasm/blob/main/WebApp-OIDC/MyOrg/README.md", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-blazor-webassembly", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-blazor-wasm.git", + "LocalPath": "BlazorWASM\\SignIn" }, "Projects": [ { - "Name": "API Project", - "ProjectPath": "WebApp-your-API\\MyOrg\\Service", + "Name": "Client Project", + "ProjectPath": "WebApp-OIDC\\MyOrg", "Order": "0", "PortalSettings": { - "DisplayName": "ToDoListService-aspnetcore", + "DisplayName": "WebApp-blazor-wasm", "SignInAudience": "AzureADMyOrg", - "AppType": "Api", - "IsHybridFlow": "", + "AppType": "Web", + "RedirectUri": "https://localhost:44314/authentication/login-callback", + "IsHybridFlow": "True", "IsDeviceCodeFlow": "", "SecretName": "", @@ -1275,21 +2425,11 @@ "ResourceAppId": "00000003-0000-0000-c000-000000000000", "ResourceAccesss": [ { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read "Type": "Scope" } ] } - ], - "PermissionScopes": [ - { - "Value": "access_as_user", - "Type": "User", - "AdminConsentDisplayName": "Access ToDoListService-aspnetcore", - "UserConsentDisplayName": "Access ToDoListService-aspnetcore", - "AdminConsentDescription": "Allows the app to access ToDoListService-aspnetcore as the signed-in user.", - "UserConsentDescription": "Allow the application to access ToDoListService-aspnetcore on your behalf." - } ] }, "ReplacementFields": [ @@ -1300,61 +2440,76 @@ "Format": "", "Source": "persistdata:Projects[0].App.AppId", "Destination": "ClientId", - "FileName": "appsettings.json" + "FileName": "blazorwasm-singleOrg\\wwwroot\\appsettings.json" }, { - "Name": "TenantId", + "Name": "Authority", "ReplacementType": "JSON", "Section": "AzureAd", - "Format": "", "Source": "persistdata:Projects[0].TenantId", - "Destination": "TenantId", - "FileName": "appsettings.json" - }, - { - "Name": "Domain", - "ReplacementType": "JSON", - "Section": "AzureAd", - "Format": "", - "Source": "persistdata:Projects[0].Domain", - "Destination": "Domain", - "FileName": "appsettings.json" + "Format": "https://login.microsoftonline.com/{0}", + "Destination": "Authority", + "FileName": "blazorwasm-singleOrg\\wwwroot\\appsettings.json" } ] + } + ], + "Prerequisites": [ + { + "Name": "VSCode", + "DownloadLink": "https://code.visualstudio.com/download" + }, + { + "Name": "DotNetCore", + "DownloadLink": "https://dotnet.microsoft.com/en-us/download/dotnet/3.1" }, + { + "Name": "VisualStudio", + "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + } + ] + }, + { + "Name": "Call Microsoft Graph", + "Type": "BlazorWasm", + "PlatformType": "Spa", + "DisplayName": "Enable your Blazor WebAssembly to authorize users for calling Microsoft Graph", + "WorkingFolder": "", + "Tags": [ + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "Microsoft.Authentication.WebAssembly.Msal" }, + { "Name": "PKCE" } + ], + "GitHubRepoSettings": { + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-blazor-wasm/blob/main/WebApp-graph-user/Call-MSGraph/README.md", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-blazor-webassembly", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-blazor-wasm.git", + "LocalPath": "BlazorWASM\\GraphAPI" + }, + "Projects": [ { "Name": "Client Project", - "ProjectPath": "WebApp-your-API\\MyOrg\\Client", - "Order": "1", + "ProjectPath": "WebApp-graph-user\\Call-MSGraph", + "Order": "0", "PortalSettings": { - "DisplayName": "WebApp-calls-API-blazor-server", + "DisplayName": "WebApp-blazor-wasm-graph", "SignInAudience": "AzureADMyOrg", "AppType": "Web", - "RedirectUri": "https://localhost:44318/signin-oidc", + "RedirectUri": "https://localhost:44314/authentication/login-callback", "IsHybridFlow": "True", "IsDeviceCodeFlow": "", - "SecretName": "mySecret", + "SecretName": "", "RequiredResourceAccesss": [ { "ResourceAppId": "00000003-0000-0000-c000-000000000000", "ResourceAccesss": [ { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", - "Type": "Scope" - } - ] - - }, - { - "ResourceAppId": "persistdata:Projects[0].App.AppId", - "ResourceAccesss": [ - { - "Id": "persistdata:Projects[0].PermissionScopes[0].Id", + "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", //User.Read "Type": "Scope" } ] - } ] }, @@ -1363,42 +2518,18 @@ "Name": "ClientId", "ReplacementType": "JSON", "Section": "AzureAd", - "Source": "persistdata:Projects[1].App.AppId", + "Source": "persistdata:Projects[0].App.AppId", "Destination": "ClientId", - "FileName": "appsettings.json" - }, - { - "Name": "TenantId", - "Section": "AzureAd", - "ReplacementType": "JSON", - "Source": "persistdata:Projects[1].TenantId", - "Destination": "TenantId", - "FileName": "appsettings.json" + "FileName": "blazorwasm-calls-MS-graph\\wwwroot\\appsettings.json" }, { - "Name": "Domain", - "Section": "AzureAd", + "Name": "Authority", "ReplacementType": "JSON", - "Source": "persistdata:Projects[1].Domain", - "Destination": "Domain", - "FileName": "appsettings.json" - }, - { - "Name": "ClientSecret", "Section": "AzureAd", - "ReplacementType": "JSON", - "Source": "persistdata:Projects[1].SecretText", - "Destination": "ClientSecret", - "FileName": "appsettings.json" - }, - { - "Name": "TodoListScopes", - "Section": "TodoList", - "ReplacementType": "JSON", - "Format": "api://{0}/access_as_user", - "Source": "persistdata:Projects[0].App.AppId", - "Destination": "TodoListScope", - "FileName": "appsettings.json" + "Format": "https://login.microsoftonline.com/{0}", + "Source": "persistdata:Projects[0].TenantId", + "Destination": "Authority", + "FileName": "blazorwasm-calls-MS-graph\\wwwroot\\appsettings.json" } ] } @@ -1421,17 +2552,20 @@ ] }, { + "Name": "Angular", + "Type": "Spa", "DisplayName": "Angular", "Samples": [ { "Name": "Sign In Users", "Type": "Angular", + "PlatformType": "Spa", "DisplayName": "Angular single-page application using MSAL Angular to sign-in users with Azure Active Directory", "WorkingFolder": "1-Authentication\\1-sign-in\\SPA", "Tags": [ - { "Name": "Spa" }, - { "Name": "MSAL Angular" }, + { "Name": "SignIn" }, + { "Name": "MSAL.Angular" }, { "Name": "PKCE" } ], "GitHubRepoSettings": { @@ -1505,11 +2639,13 @@ { "Name": "SPA calling Graph API", "Type": "Angular", + "PlatformType": "Spa", "DisplayName": "Angular single-page application using MSAL Angular to sign-in users with Azure Active Directory and call the Microsoft Graph API", "WorkingFolder": "2-Authorization-I\\1-call-graph\\SPA", "Tags": [ - { "Name": "Spa" }, - { "Name": "MSAL Angular" }, + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "MSAL.Angular" }, { "Name": "PKCE" } ], "GitHubRepoSettings": { @@ -1595,11 +2731,14 @@ { "Name": "SPA calling .NET core API", "Type": "Angular", + "PlatformType": "Spa", "DisplayName": "Angular single-page application using MSAL Angular to sign-in users with Azure Active Directory and call a .NET Core web API", "WorkingFolder": "3-Authorization-II\\1-call-api", "Tags": [ - { "Name": "Spa" }, - { "Name": "MSAL Angular" }, + { "Name": "SignIn" }, + { "Name": "SignIn" }, + { "Name": "CallCustomApi" }, + { "Name": "MSAL.Angular" }, { "Name": "PKCE" } ], "GitHubRepoSettings": { @@ -1759,11 +2898,15 @@ { "Name": "SPA calling .NET core API Which calls Graph(OBO)", "Type": "Angular", + "PlatformType": "Spa", "DisplayName": "Angular single-page application authorizing .NET Core web API to call Microsoft Graph using on-behalf-of flow", "WorkingFolder": "7-AdvancedScenarios\\1-call-api-obo", "Tags": [ - { "Name": "Spa" }, - { "Name": "MSAL Angular" }, + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "CallCustomApi" }, + { "Name": "MSAL.Angular" }, + { "Name": "Microsoft.Identity.Web" }, { "Name": "PKCE" }, { "Name": "OBO" } ], @@ -1940,16 +3083,18 @@ }, { "Name": "React", + "Type": "Spa", "DisplayName": "React", "Samples": [ { "Name": "Sign In Users", "Type": "React", + "PlatformType": "Spa", "DisplayName": "React single-page application using MSAL React to sign-in users against Azure Active Directory", "WorkingFolder": "1-Authentication\\1-sign-in\\SPA", "Tags": [ - { "Name": "Spa" }, - { "Name": "MSAL React" }, + { "Name": "SignIn" }, + { "Name": "MSAL.React" }, { "Name": "PKCE" } ], "GitHubRepoSettings": { @@ -2026,11 +3171,13 @@ { "Name": "SPA calling Graph API", "Type": "React", + "PlatformType": "Spa", "DisplayName": "React single-page application using MSAL React to sign-in users and call Graph API against Azure Active Directory", "WorkingFolder": "2-Authorization-I\\1-call-graph\\SPA", "Tags": [ - { "Name": "Spa" }, - { "Name": "MSAL React" }, + { "Name": "SignIn" }, + { "Name": "Callgraph" }, + { "Name": "MSAL.React" }, { "Name": "PKCE" } ], "GitHubRepoSettings": { @@ -2120,11 +3267,14 @@ { "Name": "SPA calling NodeJS API", "Type": "React", + "PlatformType": "Spa", "DisplayName": "A React single-page application using MSAL React to authorize users for calling a protected web API on Azure Active Directory", "WorkingFolder": "3-Authorization-II\\1-call-api", "Tags": [ - { "Name": "Spa" }, - { "Name": "MSAL React" }, + { "Name": "SignIn" }, + { "Name": "CallCustomApi" }, + { "Name": "MSAL.React" }, + { "Name": "MSAL.Node" }, { "Name": "PKCE" } ], "GitHubRepoSettings": { @@ -2268,16 +3418,18 @@ }, { "Name": "Javascript", + "Type": "Spa", "DisplayName": "Javascript", "Samples": [ { "Name": "Sign In Users", - "Type": "JS", + "Type": "Javascript", + "PlatformType": "Spa", "DisplayName": "React single-page application using MSAL React to sign-in users against Azure Active Directory", "WorkingFolder": "1-Authentication\\1-sign-in", "Tags": [ - { "Name": "Spa" }, - { "Name": "MSAL JS" }, + { "Name": "SignIn" }, + { "Name": "MSAL.JS" }, { "Name": "PKCE" } ], "GitHubRepoSettings": { @@ -2295,178 +3447,10 @@ "DisplayName": "ms-identity-javascript-tutorial-c1s1", "SignInAudience": "AzureADMyOrg", "AppType": "Spa", - "RedirectUri": "http://localhost:3000/", - "IsHybridFlow": "", - "IsDeviceCodeFlow": "", - "SecretName": "", - - "RequiredResourceAccesss": [ - { - "ResourceAppId": "00000003-0000-0000-c000-000000000000", - "ResourceAccesss": [ - { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", - "Type": "Scope" - } - ] - } - ] - }, - "ReplacementFields": [ - { - "Name": "ClientId", - "ReplacementType": "TXT", - "Format": "", - "Source": "persistdata:Projects[0].App.AppId", - "Destination": "Enter_the_Application_Id_Here", - "FileName": "App\\authConfig.js" - }, - { - "Name": "Authority", - "ReplacementType": "TXT", - "Format": "", - "Source": "persistdata:Projects[0].TenantId", - "Destination": "Enter_the_Tenant_Info_Here", - "FileName": "App\\authConfig.js" - }, - { - "Name": "redirectURi", - "ReplacementType": "TXT", - "Format": "", - "Source": "http://localhost:3000/", - "Destination": "Enter_the_Redirect_Uri_Here", - "FileName": "App\\authConfig.js" - } - ] - } - ], - "Prerequisites": [ - { - "Name": "VSCode", - "DownloadLink": "https://code.visualstudio.com/download" - }, - { - "Name": "NPM", - "DownloadLink": "https://docs.npmjs.com/downloading-and-installing-node-js-and-npm" - } - ] - }, - { - "Name": "Call Microsoft Graph", - "Type": "JS", - "DisplayName": "Vanilla JavaScript single-page application using MSAL.js to authorize users for calling Microsoft Graph", - "WorkingFolder": "2-Authorization-I\\1-call-graph", - "Tags": [ - { "Name": "Spa" }, - { "Name": "MSAL JS" }, - { "Name": "PKCE" } - ], - "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-javascript-tutorial/blob/main/2-Authorization-I/1-call-graph/README.md", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-javascript-auth-code", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-javascript-tutorial.git", - "LocalPath": "JS\\CallGraph" - }, - "Projects": [ - { - "Name": "Client Project", - "ProjectPath": "2-Authorization-I\\1-call-graph", - "Order": "0", - "PortalSettings": { - "DisplayName": "ms-identity-javascript-tutorial-c2s1", - "SignInAudience": "AzureADMyOrg", - "AppType": "Spa", - "RedirectUri": "http://localhost:3000/", - "IsHybridFlow": "", - "IsDeviceCodeFlow": "", - "SecretName": "", - - "RequiredResourceAccesss": [ - { - "ResourceAppId": "00000003-0000-0000-c000-000000000000", - "ResourceAccesss": [ - { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", - "Type": "Scope" - } - ] - } - ] - }, - "ReplacementFields": [ - { - "Name": "ClientId", - "ReplacementType": "TXT", - "Format": "", - "Source": "persistdata:Projects[0].App.AppId", - "Destination": "Enter_the_Application_Id_Here", - "FileName": "App\\authConfig.js" - }, - { - "Name": "Authority", - "ReplacementType": "TXT", - "Format": "", - "Source": "persistdata:Projects[0].TenantId", - "Destination": "Enter_the_Tenant_Info_Here", - "FileName": "App\\authConfig.js" - }, - { - "Name": "redirectURi", - "ReplacementType": "TXT", - "Format": "", - "Source": "http://localhost:3000/", - "Destination": "Enter_the_Redirect_Uri_Here", - "FileName": "App\\authConfig.js" - } - ] - } - ], - "Prerequisites": [ - { - "Name": "VSCode", - "DownloadLink": "https://code.visualstudio.com/download" - }, - { - "Name": "NPM", - "DownloadLink": "https://docs.npmjs.com/downloading-and-installing-node-js-and-npm" - } - ] - } - ] - }, - { - "Name": "Node", - "DisplayName": "Node.js", - "Samples": [ - { - "Name": "Sign In Users", - "Type": "NodeJS", - "DisplayName": "A Node.js & Express web app authenticating users against Azure AD with MSAL Nod", - "WorkingFolder": "1-Authentication\\1-sign-in", - "Tags": [ - { "Name": "Node" }, - { "Name": "MSAL JS" }, - { "Name": "Auth Code Flow" } - ], - "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-javascript-nodejs-tutorial/blob/main/1-Authentication/1-sign-in/README.md", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-nodejs-webapp-msal", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-javascript-nodejs-tutorial.git", - "LocalPath": "NodeJS\\SignIn" - }, - "Projects": [ - { - "Name": "Client Project", - "ProjectPath": "1-Authentication\\1-sign-in", - "Order": "0", - "PortalSettings": { - "DisplayName": "msal-node-webapp", - "SignInAudience": "AzureADMyOrg", - "AppType": "Web", - "RedirectUri": "http://localhost:4000/redirect", - "IsHybridFlow": "True", + "RedirectUri": "http://localhost:3000/", + "IsHybridFlow": "", "IsDeviceCodeFlow": "", - "SecretName": "appsecret", + "SecretName": "", "RequiredResourceAccesss": [ { @@ -2487,31 +3471,23 @@ "Format": "", "Source": "persistdata:Projects[0].App.AppId", "Destination": "Enter_the_Application_Id_Here", - "FileName": "App\\appSettings.js" + "FileName": "App\\authConfig.js" }, { - "Name": "TenantId", + "Name": "Authority", "ReplacementType": "TXT", "Format": "", "Source": "persistdata:Projects[0].TenantId", "Destination": "Enter_the_Tenant_Info_Here", - "FileName": "App\\appSettings.js" - }, - { - "Name": "ClientSecret", - "ReplacementType": "TXT", - "Format": "", - "Source": "persistdata:Projects[0].SecretText", - "Destination": "Enter_the_Client_Secret_Here", - "FileName": "App\\appSettings.js" + "FileName": "App\\authConfig.js" }, { - "Name": "ClientSecret", + "Name": "redirectURi", "ReplacementType": "TXT", "Format": "", - "Source": "persistdata:Projects[0].SecretText", - "Destination": "ENTER_YOUR_SECRET_HERE", - "FileName": "App\\app.js" + "Source": "http://localhost:3000/", + "Destination": "Enter_the_Redirect_Uri_Here", + "FileName": "App\\authConfig.js" } ] } @@ -2528,34 +3504,35 @@ ] }, { - "Name": "Call MS Graph", - "Type": "NodeJS", - "DisplayName": "A Node.js & Express web app calling Microsoft Graph using MSAL Node", - "WorkingFolder": "2-Authorization\\1-call-graph", + "Name": "Call Microsoft Graph", + "Type": "Javascript", + "PlatformType": "Spa", + "DisplayName": "Vanilla JavaScript single-page application using MSAL.js to authorize users for calling Microsoft Graph", + "WorkingFolder": "2-Authorization-I\\1-call-graph", "Tags": [ - { "Name": "Node" }, - { "Name": "MSAL JS" }, - { "Name": "Auth Code Flow" } + { "Name": "SignIn" }, + { "Name": "CallGraph" }, + { "Name": "PKCE" } ], "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-javascript-nodejs-tutorial/blob/main/2-Authorization/1-call-graph/README.md", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-nodejs-webapp-msal", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-javascript-nodejs-tutorial.git", - "LocalPath": "NodeJS\\CallGraph" + "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-javascript-tutorial/blob/main/2-Authorization-I/1-call-graph/README.md", + "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-javascript-auth-code", + "ClonePath": "https://github.com/Azure-Samples/ms-identity-javascript-tutorial.git", + "LocalPath": "JS\\CallGraph" }, "Projects": [ { "Name": "Client Project", - "ProjectPath": "2-Authorization\\1-call-graph", + "ProjectPath": "2-Authorization-I\\1-call-graph", "Order": "0", "PortalSettings": { - "DisplayName": "msal-node-webapp", + "DisplayName": "ms-identity-javascript-tutorial-c2s1", "SignInAudience": "AzureADMyOrg", - "AppType": "Web", - "RedirectUri": "http://localhost:4000/redirect", - "IsHybridFlow": "True", + "AppType": "Spa", + "RedirectUri": "http://localhost:3000/", + "IsHybridFlow": "", "IsDeviceCodeFlow": "", - "SecretName": "appsecret", + "SecretName": "", "RequiredResourceAccesss": [ { @@ -2566,15 +3543,6 @@ "Type": "Scope" } ] - }, - { - "resourceAppId": "797f4846-ba00-4fd7-ba43-dac1f8f63013", - "resourceAccess": [ - { - "id": "41094075-9dad-400e-a0bd-54e686782033", - "type": "Scope" - } - ] } ] }, @@ -2585,31 +3553,23 @@ "Format": "", "Source": "persistdata:Projects[0].App.AppId", "Destination": "Enter_the_Application_Id_Here", - "FileName": "App\\appSettings.js" + "FileName": "App\\authConfig.js" }, { - "Name": "TenantId", + "Name": "Authority", "ReplacementType": "TXT", "Format": "", "Source": "persistdata:Projects[0].TenantId", "Destination": "Enter_the_Tenant_Info_Here", - "FileName": "App\\appSettings.js" - }, - { - "Name": "ClientSecret", - "ReplacementType": "TXT", - "Format": "", - "Source": "persistdata:Projects[0].SecretText", - "Destination": "Enter_the_Client_Secret_Here", - "FileName": "App\\appSettings.js" + "FileName": "App\\authConfig.js" }, { - "Name": "ClientSecret", + "Name": "redirectURi", "ReplacementType": "TXT", "Format": "", - "Source": "persistdata:Projects[0].SecretText", - "Destination": "ENTER_YOUR_SECRET_HERE", - "FileName": "App\\app.js" + "Source": "http://localhost:3000/", + "Destination": "Enter_the_Redirect_Uri_Here", + "FileName": "App\\authConfig.js" } ] } @@ -2628,21 +3588,23 @@ ] }, { - "Name": "WPF", + "Name": "Wpf", "DisplayName": "WPF", + "Type": "PublicClient", "Samples": [ { "Name": "WPF app calling Graph", - "Type": "WPFMSAL", + "Type": "Wpf", + "PlatformType": "PublicClient", "DisplayName": "WPF application signing in users with Microsoft and calling the Microsoft Graph", "WorkingFolder": "", "Tags": [ - { "Name": "Desktop" }, - { "Name": "WPF" }, + { "Name": "SignIn" }, + { "Name": "CallGraph" }, { "Name": "MSAL.NET" }, { "Name": "WAM" }, - { "Name": "System browser" }, - { "Name": "PKCE Flow" } + { "Name": "Desktop" }, + { "Name": "PKCE" } ], "GitHubRepoSettings": { "ReadMeLink": "https://github.com/Azure-Samples/active-directory-dotnet-desktop-msgraph-v2/blob/master/README.md", @@ -2702,16 +3664,18 @@ }, { "Name": "WPF app calling ASP.NET core API", - "Type": "WPFMSAL", + "Type": "Wpf", + "PlatformType": "PublicClient", "DisplayName": "Sign-in a user with the Microsoft Identity Platform in a WPF Desktop application and call an ASP.NET Core Web API", "WorkingFolder": "1. Desktop app calls Web API", "Tags": [ - { "Name": "Desktop" }, - { "Name": "WPF" }, + { "Name": "SignIn" }, + { "Name": "CallCustomApi" }, { "Name": "MSAL.NET" }, + { "Name": "Microsoft.Identity.Web" }, { "Name": "WAM" }, { "Name": "System browser" }, - { "Name": "PKCE Flow" } + { "Name": "PKCE" } ], "GitHubRepoSettings": { "ReadMeLink": "https://github.com/Azure-Samples/active-directory-dotnet-native-aspnetcore-v2/blob/master/1.%20Desktop%20app%20calls%20Web%20API/README.md", @@ -2843,21 +3807,24 @@ }, { "Name": "XAMARIN", + "Type": "PublicClient", "DisplayName": "XAMARIN", "Samples": [ { - "Name": "Sign in users in XAMARIN", + "Name": "Sign in users", "Type": "XAMARIN", + "PlatformType": "PublicClient", "DisplayName": "Integrate Microsoft identity and the Microsoft Graph into a Xamarin forms app using MSAL", "WorkingFolder": "1-Basic", "Tags": [ + { "Name": "SignIn" }, { "Name": "Mobile" }, - { "Name": "UWP" }, { "Name": "ANDROID/IOS" }, { "Name": "XAMARIN" }, - { "Name": "MSAL Net" }, + { "Name": "MSAL.Net" }, { "Name": "Broker" }, - { "Name": "PKCE Flow" } + { "Name": "Wam" }, + { "Name": "PKCE" } ], "GitHubRepoSettings": { "ReadMeLink": "https://github.com/Azure-Samples/active-directory-xamarin-native-v2/blob/main/1-Basic/README.md", @@ -2948,24 +3915,25 @@ } ] } - + ] }, { "Name": "Android", + "Type": "PublicClient", "DisplayName": "Android", "Samples": [ { "Name": "Sign in users and call Microsoft Graph(Java Android)", "Type": "JavaAndroid", + "PlatformType": "PublicClient", "DisplayName": "Use MSAL in an Android app to sign-in users and call Microsoft Graph", "WorkingFolder": "", "Tags": [ - { "Name": "Mobile" }, - { "Name": "Android Kotlin" }, - { "Name": "MSAL Android" }, + { "Name": "SignIn" }, + { "Name": "MSAL.Android" }, { "Name": "Broker" }, - { "Name": "PKCE Flow" } + { "Name": "PKCE" } ], "GitHubRepoSettings": { "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-android-java/blob/master/README.md", @@ -3041,15 +4009,15 @@ }, { "Name": "Sign in users and call Microsoft Graph(Java Kotlin)", - "Type": "JavaKotlin", + "Type": "JavaKotlinAndroid", + "PlatformType": "PublicClient", "DisplayName": "Use MSAL in an Android app to sign-in users and call Microsoft Graph", "WorkingFolder": "", "Tags": [ - { "Name": "Mobile" }, - { "Name": "Android Kotlin" }, - { "Name": "MSAL Android" }, + { "Name": "SignIn" }, + { "Name": "MSAL.Android" }, { "Name": "Broker" }, - { "Name": "PKCE Flow" } + { "Name": "PKCE" } ], "GitHubRepoSettings": { "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-android-kotlin/blob/master/README.md", @@ -3123,181 +4091,108 @@ } ] } + //{ + // "Name": "Sign in users and display profile pic(Java Kotlin)", + // "Type": "JavaKotlinAndroid", + // "PlatformType": "PublicClient", + // "DisplayName": "Use MSAL in an Android app to sign-in users and call Microsoft Graph", + // "WorkingFolder": "", + // "Tags": [ + // { "Name": "SignIn" }, + // { "Name": "MSAL.Android" }, + // { "Name": "Broker" }, + // { "Name": "PKCE" } + // ], + // "GitHubRepoSettings": { + // "ReadMeLink": "https://github.com/idaceappdev/ms-identity-android-kotlin/blob/master/README.md", + // "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-android", + // "ClonePath": "https://github.com/idaceappdev/ms-identity-android-kotlin.git", + // "LocalPath": "AndroidKotlin\\CallGraph" + // }, + // "Projects": [ + // { + // "Name": "Client Project", + // "ProjectPath": "", + // "Order": "0", + // "PortalSettings": { + // "DisplayName": "AndroidKotlinApp", + // "SignInAudience": "AzureADandPersonalMicrosoftAccount", + // "AppType": "Desktop", + // "RedirectUri": "msauth://com.azuresamples.msalandroidkotlinapp/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D", + // "IsHybridFlow": "", + // "IsDeviceCodeFlow": "", + // "SecretName": "", + + // "RequiredResourceAccesss": [ + // { + // "ResourceAppId": "00000003-0000-0000-c000-000000000000", + // "ResourceAccesss": [ + // { + // "id": "b340eb25-3456-403f-be2f-af7a0d370277", + // "Type": "Scope" + // } + // ] + // } + // ] + // }, + // "ReplacementFields": [ + // { + // "Name": "ClientId", + // "ReplacementType": "JSON", + // "Section": "", + // "Source": "persistdata:Projects[0].App.AppId", + // "Destination": "client_id", + // "FileName": "app\\src\\main\\res\\raw\\auth_config_single_account.json" + // }, + // { + // "Name": "ClientId", + // "ReplacementType": "JSON", + // "Section": "", + // "Source": "persistdata:Projects[0].App.AppId", + // "Destination": "client_id", + // "FileName": "app\\src\\main\\res\\raw\\auth_config_multiple_account.json" + // } + // //{ + // // "Name": "Authority", + // // "ReplacementType": "JSON", + // // "Section": "", + // // "Format": "https://login.microsoftonline.com/{0}", + // // "Source": "persistdata:Projects[0].TenantId", + // // "Destination": "authorities:0:authority_url", + // // "FileName": "app\\src\\main\\res\\raw\\auth_config_single_account.json" + // //} + // ] + // } + // ], + // "Prerequisites": [ + // { + // "Name": "Java", + // "DownloadLink": "https://code.visualstudio.com/download" + // }, + // { + // "Name": "Android Studio", + // "DownloadLink": "https://visualstudio.microsoft.com/downloads/" + // } + // ] + //} ] }, { - "Name": "Python", + "Name": "PythonHeadlessConsole", + "Type": "Daemon", "DisplayName": "Python", "Samples": [ - { - "Name": "Sign in users in python flask web app", - "Type": "PythonFlask", - "DisplayName": "Enable your Python Flask webapp to sign in users to your Azure Active Directory tenant with the Microsoft identity platform", - "WorkingFolder": "", - "Tags": [ - { "Name": "Web App" }, - { "Name": "Python Flask" }, - { "Name": "MSAL Python" }, - { "Name": "Auth Code Flow" } - ], - "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-python-flask-webapp-authentication", - "TutorialLink": "https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-python-token-cache-serialization", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-python-flask-webapp-authentication.git", - "LocalPath": "PythonFlask\\SignIn" - }, - "Projects": [ - { - "Name": "Client Project", - "ProjectPath": "", - "Order": "0", - "PortalSettings": { - "DisplayName": "python-flask-webapp-auth-my-tenant", - "SignInAudience": "AzureADMyOrg", - "AppType": "Web", - "RedirectUri": "https://127.0.0.1:5000/auth/redirect", - "IsHybridFlow": "", - "IsDeviceCodeFlow": "", - "SecretName": "mysecret", - - "RequiredResourceAccesss": [ - { - "ResourceAppId": "00000003-0000-0000-c000-000000000000", - "ResourceAccesss": [ - { - "Id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", - "Type": "Scope" - } - ] - } - ] - }, - "ReplacementFields": [ - { - "Name": "ClientId", - "ReplacementType": "JSON", - "Section": "client", - "Source": "persistdata:Projects[0].App.AppId", - "Destination": "client_id", - "FileName": "aad.config.json" - }, - { - "Name": "TenantId", - "ReplacementType": "JSON", - "Section": "client", - "Format": "https://login.microsoftonline.com/{0}", - "Source": "persistdata:Projects[0].TenantId", - "Destination": "authority", - "FileName": "aad.config.json" - }, - { - "Name": "ClientSecret", - "ReplacementType": "JSON", - "Section": "client", - "Format": "", - "Source": "persistdata:Projects[0].SecretText", - "Destination": "client_credential", - "FileName": "aad.config.json" - } - ] - } - ], - "Prerequisites": [ - { - "Name": "VSCode", - "DownloadLink": "https://code.visualstudio.com/download" - }, - { - "Name": "Python", - "DownloadLink": "https://www.python.org/downloads/release/python-380/" - } - ] - }, - { - "Name": "Python flask web app calling graph API", - "Type": "PythonFlask", - "DisplayName": "This sample demonstrates a Python web application calling a Microsoft Graph that is secured using Azure Active Directory.", - "WorkingFolder": "", - "Tags": [ - { "Name": "Web App" }, - { "Name": "Python Flask" }, - { "Name": "MSAL Python" }, - { "Name": "Auth Code Flow" } - ], - "GitHubRepoSettings": { - "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-python-webapp", - "TutorialLink": "https://docs.microsoft.com/en-us/samples/azure-samples/ms-identity-python-webapp/ms-identity-python-webapp/", - "ClonePath": "https://github.com/Azure-Samples/ms-identity-python-webapp.git", - "LocalPath": "PythonFlask\\CallGraphAPI" - }, - "Projects": [ - { - "Name": "Client Project", - "ProjectPath": "", - "Order": "0", - "PortalSettings": { - "DisplayName": "python-webapp", - "SignInAudience": "AzureADandPersonalMicrosoftAccount", - "AppType": "Web", - "RedirectUri": "http://localhost:5000/getAToken", - "IsHybridFlow": "", - "IsDeviceCodeFlow": "", - "SecretName": "appsecret", - - "RequiredResourceAccesss": [ - { - "ResourceAppId": "00000003-0000-0000-c000-000000000000", - "ResourceAccesss": [ - { - "id": "b340eb25-3456-403f-be2f-af7a0d370277", - "Type": "Scope" - } - ] - } - ] - }, - "ReplacementFields": [ - { - "Name": "ClientId", - "ReplacementType": "TXT", - "Section": "client", - "Source": "persistdata:Projects[0].App.AppId", - "Destination": "Enter_the_Application_Id_here", - "FileName": "app_config.py" - }, - { - "Name": "ClientSecret", - "ReplacementType": "TXT", - "Section": "client", - "Format": "", - "Source": "persistdata:Projects[0].SecretText", - "Destination": "Enter_the_Client_Secret_Here", - "FileName": "app_config.py" - } - ] - } - ], - "Prerequisites": [ - { - "Name": "VSCode", - "DownloadLink": "https://code.visualstudio.com/download" - }, - { - "Name": "Python", - "DownloadLink": "https://www.python.org/downloads/release/python-380/" - } - ] - }, { "Name": "Daemon - Call Microsoft Graph with secret", - "Type": "Python", + "Type": "PythonHeadlessConsole", + "PlatformType": "Daemon", "DisplayName": "A simple Python daemon console application calling Microsoft Graph with its own identity (client secret variation)", "WorkingFolder": "1-Call-MsGraph-WithSecret", "Tags": [ { "Name": "Daemon" }, { "Name": "Python" }, - { "Name": "MSAL Python" }, - { "Name": "Client credential flow" } + { "Name": "MSAL.Python" }, + { "Name": "Client Credential Flow" } ], "GitHubRepoSettings": { "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-python-daemon/tree/master/1-Call-MsGraph-WithSecret", @@ -3377,14 +4272,16 @@ }, { "Name": "Daemon - Call Microsoft Graph with Certificate", - "Type": "Python", + "Type": "PythonHeadlessConsole", + "PlatformType": "Daemon", "DisplayName": "A simple Python daemon console application calling Microsoft Graph with its own identity (client certificate variation)", "WorkingFolder": "2-Call-MsGraph-WithCertificate", "Tags": [ { "Name": "Daemon" }, { "Name": "Python" }, - { "Name": "MSAL Python" }, - { "Name": "Client credential flow" } + { "Name": "WithCertificate" }, + { "Name": "MSAL.Python" }, + { "Name": "Client Credential Flow" } ], "GitHubRepoSettings": { "ReadMeLink": "https://github.com/Azure-Samples/ms-identity-python-daemon/blob/master/2-Call-MsGraph-WithCertificate/README.md", diff --git a/IdAceCodeEditor/IdAceCodeEditor.csproj b/IdAceCodeEditor/IdAceCodeEditor.csproj index 655d009..5697c3e 100644 --- a/IdAceCodeEditor/IdAceCodeEditor.csproj +++ b/IdAceCodeEditor/IdAceCodeEditor.csproj @@ -5,6 +5,7 @@ netcoreapp3.1 true bin + getsitelogo.ico @@ -13,6 +14,10 @@ + + + + diff --git a/IdAceCodeEditor/Models/DataSource.cs b/IdAceCodeEditor/Models/DataSource.cs index 89c715a..81c86a9 100644 --- a/IdAceCodeEditor/Models/DataSource.cs +++ b/IdAceCodeEditor/Models/DataSource.cs @@ -2,15 +2,35 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Runtime.CompilerServices; using System.Text; using System.Windows; using System.Windows.Input; namespace IdAceCodeEditor { - public class DataSource + public class DataSource : INotifyPropertyChanged { - public ObservableCollection Frameworks{ get; set; } + public event PropertyChangedEventHandler PropertyChanged; + protected void OnPropertyChanged([CallerMemberName] string name = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); + } + public ObservableCollection Frameworks{ get; set; } + + Framework _SelectedFramework; + public Framework SelectedFramework + { + get { return _SelectedFramework; } + set + { + _SelectedFramework = value; + // Call OnPropertyChanged whenever the property is updated + OnPropertyChanged(); + } + } + public ObservableCollection Samples { get; set; } private ICommand _guideMeCommand; diff --git a/IdAceCodeEditor/Models/Framework.cs b/IdAceCodeEditor/Models/Framework.cs index ee95e17..5091d0d 100644 --- a/IdAceCodeEditor/Models/Framework.cs +++ b/IdAceCodeEditor/Models/Framework.cs @@ -11,6 +11,7 @@ public class Framework { public string Name { get; set; } public string DisplayName { get; set; } + public string Type { get; set; } public ObservableCollection Samples { get; set; } } diff --git a/IdAceCodeEditor/Models/Sample.cs b/IdAceCodeEditor/Models/Sample.cs index 911c586..692a0ac 100644 --- a/IdAceCodeEditor/Models/Sample.cs +++ b/IdAceCodeEditor/Models/Sample.cs @@ -2,18 +2,36 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Runtime.CompilerServices; using System.Text; using System.Windows; using System.Windows.Input; namespace IdAceCodeEditor { - public class Sample + public class Sample : INotifyPropertyChanged { + public event PropertyChangedEventHandler PropertyChanged; + protected void OnPropertyChanged([CallerMemberName] string name = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); + } + bool _IsSelected; + public bool IsSelected + { + get { return _IsSelected; } + set + { + _IsSelected = value; + // Call OnPropertyChanged whenever the property is updated + OnPropertyChanged(); + } + } public string Name { get; set; } public string DisplayName { get; set; } public string Type { get; set; } - + public string PlatformType { get; set; } public string WorkingFolder { get; set; } public GitHubRepo GitHubRepoSettings{ get; set; } public ObservableCollection Projects { get; set; } diff --git a/IdAceCodeEditor/Views/GuideMeWindow.xaml b/IdAceCodeEditor/Views/GuideMeWindow.xaml index a5f5b07..819cb6e 100644 --- a/IdAceCodeEditor/Views/GuideMeWindow.xaml +++ b/IdAceCodeEditor/Views/GuideMeWindow.xaml @@ -5,45 +5,71 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:IdAceCodeEditor.Views" mc:Ignorable="d" - Title="GuideMeWindow" Height="650" Width="420" WindowStartupLocation="CenterOwner"> + Title="GuideMeWindow" Height="655" Width="700" Closing="Window_Closing" WindowStartupLocation="CenterOwner"> - - - - + + + + - - - Select the aplication platform - - + + + + + + + + Web Application + SPA - Single page application + + + Public Client - Mobile/Desktop + Daemon - No user involved + + - + - If the application interactive and user is involved, then please select this option - If the application daemon and operates without UI, then please select this option + Select your aplication framework + - - - Application implements sign-in feature to the users - Application implements sign-in feature to the users and then calls graph resources - Application implements sign-in feature to the users and then calls custom API - + + + + + + + + User should Sign In to app + App Calls Graph Api + App calls custom Api + + + Usage of certificate over secret + Integration with Azure KeyVault + CAE enabled client + + - + - Usage of certificate - Store Certificate in Azure KeyVault - CAE + + Based on your creteria, below samples are most relavent in the order of sequence. Select one and click submit button + + - + - - + + diff --git a/IdAceCodeEditor/Views/GuideMeWindow.xaml.cs b/IdAceCodeEditor/Views/GuideMeWindow.xaml.cs index ba8a55c..5513cf7 100644 --- a/IdAceCodeEditor/Views/GuideMeWindow.xaml.cs +++ b/IdAceCodeEditor/Views/GuideMeWindow.xaml.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; @@ -9,6 +11,7 @@ using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; +using Windows.Devices.Lights; namespace IdAceCodeEditor.Views { @@ -20,6 +23,100 @@ public partial class GuideMeWindow : Window public GuideMeWindow(DataSource framework) { InitializeComponent(); + ObservableCollection allSamples = new ObservableCollection(); + foreach (var frame in framework.Frameworks) + { + foreach (var samp in frame.Samples) + { + allSamples.Add(samp); + } + } + framework.Samples = allSamples; + this.DataContext = framework; + } + + private void RadioButton_Checked(object sender, RoutedEventArgs e) + { + var radioButton = sender as RadioButton; + var framworks = cmbFramework.ItemsSource; + + CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(cmbFramework.Items); + itemsViewOriginal.Filter = ((o) => + { + return ((Framework)o).Type.Equals(radioButton.Tag); + }); + itemsViewOriginal.Refresh(); + + CollectionView itemsViewOriginal2 = (CollectionView)CollectionViewSource.GetDefaultView(lstScenario.Items); + itemsViewOriginal2.Filter = ((o) => + { + return ((Sample)o).PlatformType.Equals(radioButton.Tag); + }); + itemsViewOriginal2.Refresh(); + } + + private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) + { + CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(cmbFramework.Items); + itemsViewOriginal.Filter = ((o) => + { + return true; + }); + itemsViewOriginal.Refresh(); + } + private void cmbFramework_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + var comboBox = sender as ComboBox; + Framework framework= comboBox.SelectedItem as Framework; + + if (framework != null && comboBox!=null) + { + CollectionView itemsViewOriginal2 = (CollectionView)CollectionViewSource.GetDefaultView(lstScenario.Items); + itemsViewOriginal2.Filter = ((o) => + { + return ((Sample)o).Type.Contains(framework.Name) || + framework.Name.Contains(((Sample)o).Type); + }); + itemsViewOriginal2.Refresh(); + } + } + + private void Submit_Click(object sender, RoutedEventArgs e) + { + Framework framework= cmbFramework.SelectedItem as Framework; + Sample sample = lstScenario.SelectedItem as Sample; + + if (sample != null && framework.Samples != null) + { + foreach (var item in framework.Samples) + { + if (item.Name.Equals(sample.Name)) + item.IsSelected = true; + } + } + this.Close(); + } + + private void Cancel_Click(object sender, RoutedEventArgs e) + { + this.Close(); + } + + private void CheckBox_Checked(object sender, RoutedEventArgs e) + { + Framework framework = cmbFramework.SelectedItem as Framework; + + if (framework != null ) + { + CollectionView itemsViewOriginal2 = (CollectionView)CollectionViewSource.GetDefaultView( + lstScenario.Items); + itemsViewOriginal2.Filter = ((o) => + { + return ((Sample)o).Tags.Any(o=> o.Name.Equals("WithCertificate")); + }); + itemsViewOriginal2.Refresh(); + } } } } + diff --git a/IdAceCodeEditor/Views/IdAceCodeEditor.xaml b/IdAceCodeEditor/Views/IdAceCodeEditor.xaml index 100fc73..2445de5 100644 --- a/IdAceCodeEditor/Views/IdAceCodeEditor.xaml +++ b/IdAceCodeEditor/Views/IdAceCodeEditor.xaml @@ -6,7 +6,7 @@ xmlns:local="clr-namespace:IdAceCodeEditor" mc:Ignorable="d" Loaded="Window_Loaded" - Title="IdAceCodeEditor" Height="500" Width="800"> + Title="IDAceCodeEditor" Height="500" Width="800"> - + @@ -71,7 +71,7 @@ @@ -163,7 +163,8 @@ - diff --git a/IdAceCodeEditor/getsitelogo.ico b/IdAceCodeEditor/getsitelogo.ico new file mode 100644 index 0000000..f9f6821 Binary files /dev/null and b/IdAceCodeEditor/getsitelogo.ico differ diff --git a/IdAceCodeEditor/getsitelogo.png b/IdAceCodeEditor/getsitelogo.png new file mode 100644 index 0000000..f6f69ac Binary files /dev/null and b/IdAceCodeEditor/getsitelogo.png differ