+ support for response_mode=form_post and
new Hook in OAuthAuthorizationServerProvider: OnAuthorizationEndpointResponse
This commit is contained in:
Родитель
d0fbf8fc45
Коммит
d9ed49eb5c
878
Katana.sln
878
Katana.sln
|
@ -1,439 +1,439 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.21005.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Build", ".Build", "{D425FDFA-90FC-4276-8CBD-2850E8D78656}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
LICENSE.txt = LICENSE.txt
|
||||
NOTICE.txt = NOTICE.txt
|
||||
README.md = README.md
|
||||
Settings.StyleCop = Settings.StyleCop
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{69D0ABFE-1C8A-4CFD-AF3A-D71445AEE6BF}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
build\_apply-net45-changes.shade = build\_apply-net45-changes.shade
|
||||
build.cmd = build.cmd
|
||||
build.sh = build.sh
|
||||
build\CodeAnalysis.ruleset = build\CodeAnalysis.ruleset
|
||||
build\Common.targets = build\Common.targets
|
||||
build\CommonAssemblyInfo.cs = build\CommonAssemblyInfo.cs
|
||||
build\CustomDictionary.xml = build\CustomDictionary.xml
|
||||
build\DevAssemblyInfo.cs = build\DevAssemblyInfo.cs
|
||||
build\Katana.version.targets = build\Katana.version.targets
|
||||
build\Sakefile.shade = build\Sakefile.shade
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Hosting.Tests", "tests\Microsoft.Owin.Hosting.Tests\Microsoft.Owin.Hosting.Tests.csproj", "{D74769C3-CC85-440E-BDB8-9B20BFBFDDAE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Host.HttpListener.Tests", "tests\Microsoft.Owin.Host.HttpListener.Tests\Microsoft.Owin.Host.HttpListener.Tests.csproj", "{A8FB7DCB-3370-4D2F-B41A-63C89D281A51}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Container", "Container", "{6F8D172A-4830-4ACB-BF0A-C82A5668A2CC}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Capability", "Capability", "{4EC1647A-7297-45BB-8E4A-9D9D8C301B57}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Boot.AspNet", "src\Katana.Boot.AspNet\Katana.Boot.AspNet.csproj", "{EE2FDC70-DA4E-448D-9852-E305516DF2DD}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Middleware", "Middleware", "{ABC8FD67-E4C3-4236-AC51-280551470522}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Performance", "Performance", "{923FBCC6-ACE8-462C-ACE1-927C3EC8E77B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Performance.ReferenceApp", "tests\Katana.Performance.ReferenceApp\Katana.Performance.ReferenceApp.csproj", "{C232AB29-2F3C-4E18-9234-67B1C70CDAD5}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Performance.ReferenceApp.Tests", "tests\Katana.Performance.ReferenceApp.Tests\Katana.Performance.ReferenceApp.Tests.csproj", "{E38930BA-9F12-4609-B97C-55F08200A392}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Host.SystemWeb", "src\Microsoft.Owin.Host.SystemWeb\Microsoft.Owin.Host.SystemWeb.csproj", "{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Host.HttpListener", "src\Microsoft.Owin.Host.HttpListener\Microsoft.Owin.Host.HttpListener.csproj", "{9F0C72D8-E43F-4F01-9DEB-919191911919}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Host.SystemWeb.Tests", "tests\Microsoft.Owin.Host.SystemWeb.Tests\Microsoft.Owin.Host.SystemWeb.Tests.csproj", "{9F0C72D8-E43F-4F01-9DEB-919191919191}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Host.IntegrationTests", "tests\Microsoft.Owin.Host.IntegrationTests\Microsoft.Owin.Host.IntegrationTests.csproj", "{9F0C72D8-E43F-4F01-9DEB-123412341234}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CertInstaller", "src\Tools\CertificateInstaller\CertInstaller\CertInstaller.csproj", "{558F65BE-E09D-4A9B-9DA8-C0983445726F}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{47488541-F6D1-4385-AE49-7E3C72042521}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Performance.ReferenceApp.Selfhost", "tests\Katana.Performance.ReferenceApp.Selfhost\Katana.Performance.ReferenceApp.Selfhost.csproj", "{8AE2E716-258A-4EF3-ADF1-D3B75D677F29}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.StaticFiles", "src\Microsoft.Owin.StaticFiles\Microsoft.Owin.StaticFiles.csproj", "{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.StaticFiles.Tests", "tests\Microsoft.Owin.StaticFiles.Tests\Microsoft.Owin.StaticFiles.Tests.csproj", "{473F6EEE-455F-4553-953D-5D0736D62D11}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Auth", "src\Microsoft.Owin.Auth\Microsoft.Owin.Auth.csproj", "{970E6B61-1204-422D-A258-BFAB2955243D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Auth.Tests", "tests\Microsoft.Owin.Auth.Tests\Microsoft.Owin.Auth.Tests.csproj", "{08B04766-9926-40DD-AEE9-6AA1F185272A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Razor.Owin", "src\Microsoft.AspNet.Razor.Owin\Microsoft.AspNet.Razor.Owin.csproj", "{292742D5-D564-49B4-A682-948C3362F655}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Razor.Owin.Tests", "tests\Microsoft.AspNet.Razor.Owin.Tests\Microsoft.AspNet.Razor.Owin.Tests.csproj", "{F2882FE3-6F09-4B52-8592-EE1D127D12F4}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Testing", "src\Microsoft.Owin.Testing\Microsoft.Owin.Testing.csproj", "{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Diagnostics", "src\Microsoft.Owin.Diagnostics\Microsoft.Owin.Diagnostics.csproj", "{670915F7-F111-42FF-B004-39379A9D5951}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Compression", "src\Microsoft.Owin.Compression\Microsoft.Owin.Compression.csproj", "{75BCA849-0F1B-459E-9D63-DD875978EFD0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Compression.Tests", "tests\Microsoft.Owin.Compression.Tests\Microsoft.Owin.Compression.Tests.csproj", "{5634B41F-719D-4210-991C-D29B097376FB}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.FileSystems", "src\Microsoft.Owin.FileSystems\Microsoft.Owin.FileSystems.csproj", "{63988A9B-FA70-4BBA-8C7E-784145384F7C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.FileSystems.Tests", "tests\Microsoft.Owin.FileSystems.Tests\Microsoft.Owin.FileSystems.Tests.csproj", "{5737FA14-B873-496B-8141-49D5B273AC3A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Loader.Roslyn", "src\Katana.Loader.Roslyn\Katana.Loader.Roslyn.csproj", "{B8A42E18-F9E8-469B-86CC-30780B1F349C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Loader.Roslyn.Tests", "tests\Katana.Loader.Roslyn.Tests\Katana.Loader.Roslyn.Tests.csproj", "{56028FDD-DBD0-4A92-BE58-282105FA3C2A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Throttling", "src\Microsoft.Owin.Throttling\Microsoft.Owin.Throttling.csproj", "{0619D466-A21B-4B64-AC35-89299787DF12}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Throttling.Tests", "tests\Microsoft.Owin.Throttling.Tests\Microsoft.Owin.Throttling.Tests.csproj", "{AAD8D4BF-9EA1-4662-B96D-0956BB21F718}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Prerelease", ".Prerelease", "{A7292674-B84F-4D30-9E2D-C4885AF20608}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hosting", "Hosting", "{B9AC3489-752E-4C4E-84E4-1C82227435BA}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Development", "Development", "{E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Security", "Security", "{10A4935F-4C17-44ED-BB00-D044FC7C77B8}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Cookies", "src\Microsoft.Owin.Security.Cookies\Microsoft.Owin.Security.Cookies.csproj", "{2FB9342F-CA85-4903-8667-45ED64AD25A6}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security", "src\Microsoft.Owin.Security\Microsoft.Owin.Security.csproj", "{AAAF8157-1E33-4D6C-8319-3B304D018005}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Tests", "tests\Microsoft.Owin.Security.Tests\Microsoft.Owin.Security.Tests.csproj", "{E3B9A023-2146-4D9D-A806-1479683078AE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Facebook", "src\Microsoft.Owin.Security.Facebook\Microsoft.Owin.Security.Facebook.csproj", "{F6F1D34F-3AF6-41DD-B493-60899F959BBA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Google", "src\Microsoft.Owin.Security.Google\Microsoft.Owin.Security.Google.csproj", "{1F46BC62-A011-4B63-A5C6-51AEE2EF538D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.OAuth", "src\Microsoft.Owin.Security.OAuth\Microsoft.Owin.Security.OAuth.csproj", "{F71E48D0-115A-4105-B332-FCCB2139DC23}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sandbox", "Sandbox", "{D067FB54-B69D-4502-8E2F-676271AC4B86}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Sandbox.WebServer", "tests\Katana.Sandbox.WebServer\Katana.Sandbox.WebServer.csproj", "{1069B86E-F2C1-498B-9DD8-76C7257C6A2A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Sandbox.WebClient", "tests\Katana.Sandbox.WebClient\Katana.Sandbox.WebClient.csproj", "{3AE67011-EBB1-4ADE-8F42-8E90EB884219}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OwinHost", "src\OwinHost\OwinHost.csproj", "{D56B8357-F044-45DE-85E9-41AA7C84751E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OwinHost.Tests", "tests\OwinHost.Tests\OwinHost.Tests.csproj", "{62ACEFEA-39F8-405E-BC25-0633F1770A4B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin", "src\Microsoft.Owin\Microsoft.Owin.csproj", "{0DB69CAE-B0BC-4688-9467-66B4C1023D3F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Owin.Loader", "src\Owin.Loader\Owin.Loader.csproj", "{DF967ED4-C320-421C-859C-81034EFF615E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Tests", "tests\Microsoft.Owin.Tests\Microsoft.Owin.Tests.csproj", "{0AF835A6-8181-46DB-A17E-C765FA07A5A0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Owin.Loader.Tests", "tests\Owin.Loader.Tests\Owin.Loader.Tests.csproj", "{13785347-FC73-4D0E-9DCA-300DD87C308E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Twitter", "src\Microsoft.Owin.Security.Twitter\Microsoft.Owin.Security.Twitter.csproj", "{BBB663CB-E6A2-4E23-83C9-9C8F52325F44}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.MicrosoftAccount", "src\Microsoft.Owin.Security.MicrosoftAccount\Microsoft.Owin.Security.MicrosoftAccount.csproj", "{52F6930F-FBC0-404B-B135-6B6756F5713A}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.Owin.SelfHost", "Microsoft.Owin.SelfHost", "{9298DB20-54F3-4078-8F7F-D95B3CFA1312}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
src\Microsoft.Owin.SelfHost\Microsoft.Owin.SelfHost.nuspec = src\Microsoft.Owin.SelfHost\Microsoft.Owin.SelfHost.nuspec
|
||||
src\Microsoft.Owin.SelfHost\ReadMe.txt = src\Microsoft.Owin.SelfHost\ReadMe.txt
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Hosting", "src\Microsoft.Owin.Hosting\Microsoft.Owin.Hosting.csproj", "{C225EB2F-E7A7-463F-B058-1705F204978E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Testing.Tests", "tests\Microsoft.Owin.Testing.Tests\Microsoft.Owin.Testing.Tests.csproj", "{628A8C89-5E59-4747-8D6A-AA22267552ED}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Middleware", "Middleware", "{C5F4B293-90EC-48B8-97FA-CD23C44C9C30}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Cors", "src\Microsoft.Owin.Cors\Microsoft.Owin.Cors.csproj", "{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Cors.Tests", "tests\Microsoft.Owin.Cors.Tests\Microsoft.Owin.Cors.Tests.csproj", "{3DDAC01B-2567-4C0C-88E1-0A716729203E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Performance.ReferenceApp.Client", "tests\Katana.Performance.ReferenceApp.Client\Katana.Performance.ReferenceApp.Client.csproj", "{0D370C5B-7518-4D60-9D47-1AD59794F38F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Jwt", "src\Microsoft.Owin.Security.Jwt\Microsoft.Owin.Security.Jwt.csproj", "{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.ActiveDirectory", "src\Microsoft.Owin.Security.ActiveDirectory\Microsoft.Owin.Security.ActiveDirectory.csproj", "{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Nuget", ".Nuget", "{5230439B-C2AD-4A08-8927-526BA3BF9BF6}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.nuget\NuGet.Config = .nuget\NuGet.Config
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.WsFederation", "src\Microsoft.Owin.Security.WsFederation\Microsoft.Owin.Security.WsFederation.csproj", "{23D90C94-647A-416C-9227-9A0779401EBC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.OpenIdConnect", "src\Microsoft.Owin.Security.OpenIdConnect\Microsoft.Owin.Security.OpenIdConnect.csproj", "{AA80B4A3-C885-4A7E-AF1A-FC3E89611988}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{D74769C3-CC85-440E-BDB8-9B20BFBFDDAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D74769C3-CC85-440E-BDB8-9B20BFBFDDAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D74769C3-CC85-440E-BDB8-9B20BFBFDDAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A8FB7DCB-3370-4D2F-B41A-63C89D281A51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A8FB7DCB-3370-4D2F-B41A-63C89D281A51}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A8FB7DCB-3370-4D2F-B41A-63C89D281A51}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EE2FDC70-DA4E-448D-9852-E305516DF2DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EE2FDC70-DA4E-448D-9852-E305516DF2DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EE2FDC70-DA4E-448D-9852-E305516DF2DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EE2FDC70-DA4E-448D-9852-E305516DF2DD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C232AB29-2F3C-4E18-9234-67B1C70CDAD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C232AB29-2F3C-4E18-9234-67B1C70CDAD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C232AB29-2F3C-4E18-9234-67B1C70CDAD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C232AB29-2F3C-4E18-9234-67B1C70CDAD5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E38930BA-9F12-4609-B97C-55F08200A392}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E38930BA-9F12-4609-B97C-55F08200A392}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E38930BA-9F12-4609-B97C-55F08200A392}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E38930BA-9F12-4609-B97C-55F08200A392}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191911919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191911919}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191911919}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191911919}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191919191}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191919191}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191919191}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-123412341234}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-123412341234}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-123412341234}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-123412341234}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{558F65BE-E09D-4A9B-9DA8-C0983445726F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{558F65BE-E09D-4A9B-9DA8-C0983445726F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{558F65BE-E09D-4A9B-9DA8-C0983445726F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{558F65BE-E09D-4A9B-9DA8-C0983445726F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8AE2E716-258A-4EF3-ADF1-D3B75D677F29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8AE2E716-258A-4EF3-ADF1-D3B75D677F29}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8AE2E716-258A-4EF3-ADF1-D3B75D677F29}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8AE2E716-258A-4EF3-ADF1-D3B75D677F29}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{473F6EEE-455F-4553-953D-5D0736D62D11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{473F6EEE-455F-4553-953D-5D0736D62D11}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{473F6EEE-455F-4553-953D-5D0736D62D11}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{473F6EEE-455F-4553-953D-5D0736D62D11}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{970E6B61-1204-422D-A258-BFAB2955243D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{970E6B61-1204-422D-A258-BFAB2955243D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{970E6B61-1204-422D-A258-BFAB2955243D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{970E6B61-1204-422D-A258-BFAB2955243D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{08B04766-9926-40DD-AEE9-6AA1F185272A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{08B04766-9926-40DD-AEE9-6AA1F185272A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{08B04766-9926-40DD-AEE9-6AA1F185272A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{08B04766-9926-40DD-AEE9-6AA1F185272A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{292742D5-D564-49B4-A682-948C3362F655}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{292742D5-D564-49B4-A682-948C3362F655}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{292742D5-D564-49B4-A682-948C3362F655}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{292742D5-D564-49B4-A682-948C3362F655}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F2882FE3-6F09-4B52-8592-EE1D127D12F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F2882FE3-6F09-4B52-8592-EE1D127D12F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F2882FE3-6F09-4B52-8592-EE1D127D12F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{670915F7-F111-42FF-B004-39379A9D5951}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{670915F7-F111-42FF-B004-39379A9D5951}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{670915F7-F111-42FF-B004-39379A9D5951}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{670915F7-F111-42FF-B004-39379A9D5951}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{75BCA849-0F1B-459E-9D63-DD875978EFD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{75BCA849-0F1B-459E-9D63-DD875978EFD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{75BCA849-0F1B-459E-9D63-DD875978EFD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{75BCA849-0F1B-459E-9D63-DD875978EFD0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5634B41F-719D-4210-991C-D29B097376FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5634B41F-719D-4210-991C-D29B097376FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5634B41F-719D-4210-991C-D29B097376FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5634B41F-719D-4210-991C-D29B097376FB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{63988A9B-FA70-4BBA-8C7E-784145384F7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{63988A9B-FA70-4BBA-8C7E-784145384F7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{63988A9B-FA70-4BBA-8C7E-784145384F7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{63988A9B-FA70-4BBA-8C7E-784145384F7C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5737FA14-B873-496B-8141-49D5B273AC3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5737FA14-B873-496B-8141-49D5B273AC3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5737FA14-B873-496B-8141-49D5B273AC3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5737FA14-B873-496B-8141-49D5B273AC3A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B8A42E18-F9E8-469B-86CC-30780B1F349C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B8A42E18-F9E8-469B-86CC-30780B1F349C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B8A42E18-F9E8-469B-86CC-30780B1F349C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B8A42E18-F9E8-469B-86CC-30780B1F349C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{56028FDD-DBD0-4A92-BE58-282105FA3C2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{56028FDD-DBD0-4A92-BE58-282105FA3C2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{56028FDD-DBD0-4A92-BE58-282105FA3C2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{56028FDD-DBD0-4A92-BE58-282105FA3C2A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0619D466-A21B-4B64-AC35-89299787DF12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0619D466-A21B-4B64-AC35-89299787DF12}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0619D466-A21B-4B64-AC35-89299787DF12}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0619D466-A21B-4B64-AC35-89299787DF12}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AAD8D4BF-9EA1-4662-B96D-0956BB21F718}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AAD8D4BF-9EA1-4662-B96D-0956BB21F718}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AAD8D4BF-9EA1-4662-B96D-0956BB21F718}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AAD8D4BF-9EA1-4662-B96D-0956BB21F718}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2FB9342F-CA85-4903-8667-45ED64AD25A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2FB9342F-CA85-4903-8667-45ED64AD25A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2FB9342F-CA85-4903-8667-45ED64AD25A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2FB9342F-CA85-4903-8667-45ED64AD25A6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AAAF8157-1E33-4D6C-8319-3B304D018005}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AAAF8157-1E33-4D6C-8319-3B304D018005}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AAAF8157-1E33-4D6C-8319-3B304D018005}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AAAF8157-1E33-4D6C-8319-3B304D018005}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E3B9A023-2146-4D9D-A806-1479683078AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E3B9A023-2146-4D9D-A806-1479683078AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E3B9A023-2146-4D9D-A806-1479683078AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E3B9A023-2146-4D9D-A806-1479683078AE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F6F1D34F-3AF6-41DD-B493-60899F959BBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F6F1D34F-3AF6-41DD-B493-60899F959BBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F6F1D34F-3AF6-41DD-B493-60899F959BBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F6F1D34F-3AF6-41DD-B493-60899F959BBA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1F46BC62-A011-4B63-A5C6-51AEE2EF538D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1F46BC62-A011-4B63-A5C6-51AEE2EF538D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1F46BC62-A011-4B63-A5C6-51AEE2EF538D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1F46BC62-A011-4B63-A5C6-51AEE2EF538D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F71E48D0-115A-4105-B332-FCCB2139DC23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F71E48D0-115A-4105-B332-FCCB2139DC23}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F71E48D0-115A-4105-B332-FCCB2139DC23}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F71E48D0-115A-4105-B332-FCCB2139DC23}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1069B86E-F2C1-498B-9DD8-76C7257C6A2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1069B86E-F2C1-498B-9DD8-76C7257C6A2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1069B86E-F2C1-498B-9DD8-76C7257C6A2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3AE67011-EBB1-4ADE-8F42-8E90EB884219}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3AE67011-EBB1-4ADE-8F42-8E90EB884219}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3AE67011-EBB1-4ADE-8F42-8E90EB884219}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3AE67011-EBB1-4ADE-8F42-8E90EB884219}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D56B8357-F044-45DE-85E9-41AA7C84751E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D56B8357-F044-45DE-85E9-41AA7C84751E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D56B8357-F044-45DE-85E9-41AA7C84751E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D56B8357-F044-45DE-85E9-41AA7C84751E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{62ACEFEA-39F8-405E-BC25-0633F1770A4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{62ACEFEA-39F8-405E-BC25-0633F1770A4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{62ACEFEA-39F8-405E-BC25-0633F1770A4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{62ACEFEA-39F8-405E-BC25-0633F1770A4B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0DB69CAE-B0BC-4688-9467-66B4C1023D3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0DB69CAE-B0BC-4688-9467-66B4C1023D3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0DB69CAE-B0BC-4688-9467-66B4C1023D3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0DB69CAE-B0BC-4688-9467-66B4C1023D3F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DF967ED4-C320-421C-859C-81034EFF615E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DF967ED4-C320-421C-859C-81034EFF615E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DF967ED4-C320-421C-859C-81034EFF615E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DF967ED4-C320-421C-859C-81034EFF615E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0AF835A6-8181-46DB-A17E-C765FA07A5A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0AF835A6-8181-46DB-A17E-C765FA07A5A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0AF835A6-8181-46DB-A17E-C765FA07A5A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0AF835A6-8181-46DB-A17E-C765FA07A5A0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{13785347-FC73-4D0E-9DCA-300DD87C308E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{13785347-FC73-4D0E-9DCA-300DD87C308E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{13785347-FC73-4D0E-9DCA-300DD87C308E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{13785347-FC73-4D0E-9DCA-300DD87C308E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BBB663CB-E6A2-4E23-83C9-9C8F52325F44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BBB663CB-E6A2-4E23-83C9-9C8F52325F44}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BBB663CB-E6A2-4E23-83C9-9C8F52325F44}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BBB663CB-E6A2-4E23-83C9-9C8F52325F44}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{52F6930F-FBC0-404B-B135-6B6756F5713A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{52F6930F-FBC0-404B-B135-6B6756F5713A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{52F6930F-FBC0-404B-B135-6B6756F5713A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{52F6930F-FBC0-404B-B135-6B6756F5713A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C225EB2F-E7A7-463F-B058-1705F204978E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C225EB2F-E7A7-463F-B058-1705F204978E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C225EB2F-E7A7-463F-B058-1705F204978E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C225EB2F-E7A7-463F-B058-1705F204978E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{628A8C89-5E59-4747-8D6A-AA22267552ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{628A8C89-5E59-4747-8D6A-AA22267552ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{628A8C89-5E59-4747-8D6A-AA22267552ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{628A8C89-5E59-4747-8D6A-AA22267552ED}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3DDAC01B-2567-4C0C-88E1-0A716729203E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3DDAC01B-2567-4C0C-88E1-0A716729203E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3DDAC01B-2567-4C0C-88E1-0A716729203E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3DDAC01B-2567-4C0C-88E1-0A716729203E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0D370C5B-7518-4D60-9D47-1AD59794F38F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0D370C5B-7518-4D60-9D47-1AD59794F38F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0D370C5B-7518-4D60-9D47-1AD59794F38F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0D370C5B-7518-4D60-9D47-1AD59794F38F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{23D90C94-647A-416C-9227-9A0779401EBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{23D90C94-647A-416C-9227-9A0779401EBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{23D90C94-647A-416C-9227-9A0779401EBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{23D90C94-647A-416C-9227-9A0779401EBC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AA80B4A3-C885-4A7E-AF1A-FC3E89611988}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AA80B4A3-C885-4A7E-AF1A-FC3E89611988}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AA80B4A3-C885-4A7E-AF1A-FC3E89611988}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AA80B4A3-C885-4A7E-AF1A-FC3E89611988}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{69D0ABFE-1C8A-4CFD-AF3A-D71445AEE6BF} = {D425FDFA-90FC-4276-8CBD-2850E8D78656}
|
||||
{D74769C3-CC85-440E-BDB8-9B20BFBFDDAE} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{D56B8357-F044-45DE-85E9-41AA7C84751E} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{62ACEFEA-39F8-405E-BC25-0633F1770A4B} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{DF967ED4-C320-421C-859C-81034EFF615E} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{13785347-FC73-4D0E-9DCA-300DD87C308E} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{9298DB20-54F3-4078-8F7F-D95B3CFA1312} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{C225EB2F-E7A7-463F-B058-1705F204978E} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{A8FB7DCB-3370-4D2F-B41A-63C89D281A51} = {E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}
|
||||
{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E} = {E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191911919} = {E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191919191} = {E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}
|
||||
{9F0C72D8-E43F-4F01-9DEB-123412341234} = {E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}
|
||||
{4EC1647A-7297-45BB-8E4A-9D9D8C301B57} = {A7292674-B84F-4D30-9E2D-C4885AF20608}
|
||||
{6F8D172A-4830-4ACB-BF0A-C82A5668A2CC} = {A7292674-B84F-4D30-9E2D-C4885AF20608}
|
||||
{ABC8FD67-E4C3-4236-AC51-280551470522} = {A7292674-B84F-4D30-9E2D-C4885AF20608}
|
||||
{47488541-F6D1-4385-AE49-7E3C72042521} = {A7292674-B84F-4D30-9E2D-C4885AF20608}
|
||||
{292742D5-D564-49B4-A682-948C3362F655} = {4EC1647A-7297-45BB-8E4A-9D9D8C301B57}
|
||||
{F2882FE3-6F09-4B52-8592-EE1D127D12F4} = {4EC1647A-7297-45BB-8E4A-9D9D8C301B57}
|
||||
{B8A42E18-F9E8-469B-86CC-30780B1F349C} = {6F8D172A-4830-4ACB-BF0A-C82A5668A2CC}
|
||||
{56028FDD-DBD0-4A92-BE58-282105FA3C2A} = {6F8D172A-4830-4ACB-BF0A-C82A5668A2CC}
|
||||
{EE2FDC70-DA4E-448D-9852-E305516DF2DD} = {6F8D172A-4830-4ACB-BF0A-C82A5668A2CC}
|
||||
{970E6B61-1204-422D-A258-BFAB2955243D} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{08B04766-9926-40DD-AEE9-6AA1F185272A} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{75BCA849-0F1B-459E-9D63-DD875978EFD0} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{5634B41F-719D-4210-991C-D29B097376FB} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{0619D466-A21B-4B64-AC35-89299787DF12} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{AAD8D4BF-9EA1-4662-B96D-0956BB21F718} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{C232AB29-2F3C-4E18-9234-67B1C70CDAD5} = {923FBCC6-ACE8-462C-ACE1-927C3EC8E77B}
|
||||
{E38930BA-9F12-4609-B97C-55F08200A392} = {923FBCC6-ACE8-462C-ACE1-927C3EC8E77B}
|
||||
{8AE2E716-258A-4EF3-ADF1-D3B75D677F29} = {923FBCC6-ACE8-462C-ACE1-927C3EC8E77B}
|
||||
{0D370C5B-7518-4D60-9D47-1AD59794F38F} = {923FBCC6-ACE8-462C-ACE1-927C3EC8E77B}
|
||||
{558F65BE-E09D-4A9B-9DA8-C0983445726F} = {47488541-F6D1-4385-AE49-7E3C72042521}
|
||||
{473F6EEE-455F-4553-953D-5D0736D62D11} = {C5F4B293-90EC-48B8-97FA-CD23C44C9C30}
|
||||
{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82} = {C5F4B293-90EC-48B8-97FA-CD23C44C9C30}
|
||||
{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1} = {C5F4B293-90EC-48B8-97FA-CD23C44C9C30}
|
||||
{3DDAC01B-2567-4C0C-88E1-0A716729203E} = {C5F4B293-90EC-48B8-97FA-CD23C44C9C30}
|
||||
{670915F7-F111-42FF-B004-39379A9D5951} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{63988A9B-FA70-4BBA-8C7E-784145384F7C} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{5737FA14-B873-496B-8141-49D5B273AC3A} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{0DB69CAE-B0BC-4688-9467-66B4C1023D3F} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{0AF835A6-8181-46DB-A17E-C765FA07A5A0} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{628A8C89-5E59-4747-8D6A-AA22267552ED} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{2FB9342F-CA85-4903-8667-45ED64AD25A6} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{AAAF8157-1E33-4D6C-8319-3B304D018005} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{E3B9A023-2146-4D9D-A806-1479683078AE} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{F6F1D34F-3AF6-41DD-B493-60899F959BBA} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{1F46BC62-A011-4B63-A5C6-51AEE2EF538D} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{F71E48D0-115A-4105-B332-FCCB2139DC23} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{BBB663CB-E6A2-4E23-83C9-9C8F52325F44} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{52F6930F-FBC0-404B-B135-6B6756F5713A} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{23D90C94-647A-416C-9227-9A0779401EBC} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{AA80B4A3-C885-4A7E-AF1A-FC3E89611988} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{1069B86E-F2C1-498B-9DD8-76C7257C6A2A} = {D067FB54-B69D-4502-8E2F-676271AC4B86}
|
||||
{3AE67011-EBB1-4ADE-8F42-8E90EB884219} = {D067FB54-B69D-4502-8E2F-676271AC4B86}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.21005.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Build", ".Build", "{D425FDFA-90FC-4276-8CBD-2850E8D78656}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
LICENSE.txt = LICENSE.txt
|
||||
NOTICE.txt = NOTICE.txt
|
||||
README.md = README.md
|
||||
Settings.StyleCop = Settings.StyleCop
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{69D0ABFE-1C8A-4CFD-AF3A-D71445AEE6BF}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
build\_apply-net45-changes.shade = build\_apply-net45-changes.shade
|
||||
build.cmd = build.cmd
|
||||
build.sh = build.sh
|
||||
build\CodeAnalysis.ruleset = build\CodeAnalysis.ruleset
|
||||
build\Common.targets = build\Common.targets
|
||||
build\CommonAssemblyInfo.cs = build\CommonAssemblyInfo.cs
|
||||
build\CustomDictionary.xml = build\CustomDictionary.xml
|
||||
build\DevAssemblyInfo.cs = build\DevAssemblyInfo.cs
|
||||
build\Katana.version.targets = build\Katana.version.targets
|
||||
build\Sakefile.shade = build\Sakefile.shade
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Hosting.Tests", "tests\Microsoft.Owin.Hosting.Tests\Microsoft.Owin.Hosting.Tests.csproj", "{D74769C3-CC85-440E-BDB8-9B20BFBFDDAE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Host.HttpListener.Tests", "tests\Microsoft.Owin.Host.HttpListener.Tests\Microsoft.Owin.Host.HttpListener.Tests.csproj", "{A8FB7DCB-3370-4D2F-B41A-63C89D281A51}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Container", "Container", "{6F8D172A-4830-4ACB-BF0A-C82A5668A2CC}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Capability", "Capability", "{4EC1647A-7297-45BB-8E4A-9D9D8C301B57}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Boot.AspNet", "src\Katana.Boot.AspNet\Katana.Boot.AspNet.csproj", "{EE2FDC70-DA4E-448D-9852-E305516DF2DD}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Middleware", "Middleware", "{ABC8FD67-E4C3-4236-AC51-280551470522}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Performance", "Performance", "{923FBCC6-ACE8-462C-ACE1-927C3EC8E77B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Performance.ReferenceApp", "tests\Katana.Performance.ReferenceApp\Katana.Performance.ReferenceApp.csproj", "{C232AB29-2F3C-4E18-9234-67B1C70CDAD5}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Performance.ReferenceApp.Tests", "tests\Katana.Performance.ReferenceApp.Tests\Katana.Performance.ReferenceApp.Tests.csproj", "{E38930BA-9F12-4609-B97C-55F08200A392}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Host.SystemWeb", "src\Microsoft.Owin.Host.SystemWeb\Microsoft.Owin.Host.SystemWeb.csproj", "{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Host.HttpListener", "src\Microsoft.Owin.Host.HttpListener\Microsoft.Owin.Host.HttpListener.csproj", "{9F0C72D8-E43F-4F01-9DEB-919191911919}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Host.SystemWeb.Tests", "tests\Microsoft.Owin.Host.SystemWeb.Tests\Microsoft.Owin.Host.SystemWeb.Tests.csproj", "{9F0C72D8-E43F-4F01-9DEB-919191919191}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Host.IntegrationTests", "tests\Microsoft.Owin.Host.IntegrationTests\Microsoft.Owin.Host.IntegrationTests.csproj", "{9F0C72D8-E43F-4F01-9DEB-123412341234}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CertInstaller", "src\Tools\CertificateInstaller\CertInstaller\CertInstaller.csproj", "{558F65BE-E09D-4A9B-9DA8-C0983445726F}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{47488541-F6D1-4385-AE49-7E3C72042521}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Performance.ReferenceApp.Selfhost", "tests\Katana.Performance.ReferenceApp.Selfhost\Katana.Performance.ReferenceApp.Selfhost.csproj", "{8AE2E716-258A-4EF3-ADF1-D3B75D677F29}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.StaticFiles", "src\Microsoft.Owin.StaticFiles\Microsoft.Owin.StaticFiles.csproj", "{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.StaticFiles.Tests", "tests\Microsoft.Owin.StaticFiles.Tests\Microsoft.Owin.StaticFiles.Tests.csproj", "{473F6EEE-455F-4553-953D-5D0736D62D11}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Auth", "src\Microsoft.Owin.Auth\Microsoft.Owin.Auth.csproj", "{970E6B61-1204-422D-A258-BFAB2955243D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Auth.Tests", "tests\Microsoft.Owin.Auth.Tests\Microsoft.Owin.Auth.Tests.csproj", "{08B04766-9926-40DD-AEE9-6AA1F185272A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Razor.Owin", "src\Microsoft.AspNet.Razor.Owin\Microsoft.AspNet.Razor.Owin.csproj", "{292742D5-D564-49B4-A682-948C3362F655}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Razor.Owin.Tests", "tests\Microsoft.AspNet.Razor.Owin.Tests\Microsoft.AspNet.Razor.Owin.Tests.csproj", "{F2882FE3-6F09-4B52-8592-EE1D127D12F4}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Testing", "src\Microsoft.Owin.Testing\Microsoft.Owin.Testing.csproj", "{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Diagnostics", "src\Microsoft.Owin.Diagnostics\Microsoft.Owin.Diagnostics.csproj", "{670915F7-F111-42FF-B004-39379A9D5951}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Compression", "src\Microsoft.Owin.Compression\Microsoft.Owin.Compression.csproj", "{75BCA849-0F1B-459E-9D63-DD875978EFD0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Compression.Tests", "tests\Microsoft.Owin.Compression.Tests\Microsoft.Owin.Compression.Tests.csproj", "{5634B41F-719D-4210-991C-D29B097376FB}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.FileSystems", "src\Microsoft.Owin.FileSystems\Microsoft.Owin.FileSystems.csproj", "{63988A9B-FA70-4BBA-8C7E-784145384F7C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.FileSystems.Tests", "tests\Microsoft.Owin.FileSystems.Tests\Microsoft.Owin.FileSystems.Tests.csproj", "{5737FA14-B873-496B-8141-49D5B273AC3A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Loader.Roslyn", "src\Katana.Loader.Roslyn\Katana.Loader.Roslyn.csproj", "{B8A42E18-F9E8-469B-86CC-30780B1F349C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Loader.Roslyn.Tests", "tests\Katana.Loader.Roslyn.Tests\Katana.Loader.Roslyn.Tests.csproj", "{56028FDD-DBD0-4A92-BE58-282105FA3C2A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Throttling", "src\Microsoft.Owin.Throttling\Microsoft.Owin.Throttling.csproj", "{0619D466-A21B-4B64-AC35-89299787DF12}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Throttling.Tests", "tests\Microsoft.Owin.Throttling.Tests\Microsoft.Owin.Throttling.Tests.csproj", "{AAD8D4BF-9EA1-4662-B96D-0956BB21F718}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Prerelease", ".Prerelease", "{A7292674-B84F-4D30-9E2D-C4885AF20608}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hosting", "Hosting", "{B9AC3489-752E-4C4E-84E4-1C82227435BA}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Development", "Development", "{E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Security", "Security", "{10A4935F-4C17-44ED-BB00-D044FC7C77B8}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Cookies", "src\Microsoft.Owin.Security.Cookies\Microsoft.Owin.Security.Cookies.csproj", "{2FB9342F-CA85-4903-8667-45ED64AD25A6}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security", "src\Microsoft.Owin.Security\Microsoft.Owin.Security.csproj", "{AAAF8157-1E33-4D6C-8319-3B304D018005}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Tests", "tests\Microsoft.Owin.Security.Tests\Microsoft.Owin.Security.Tests.csproj", "{E3B9A023-2146-4D9D-A806-1479683078AE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Facebook", "src\Microsoft.Owin.Security.Facebook\Microsoft.Owin.Security.Facebook.csproj", "{F6F1D34F-3AF6-41DD-B493-60899F959BBA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Google", "src\Microsoft.Owin.Security.Google\Microsoft.Owin.Security.Google.csproj", "{1F46BC62-A011-4B63-A5C6-51AEE2EF538D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.OAuth", "src\Microsoft.Owin.Security.OAuth\Microsoft.Owin.Security.OAuth.csproj", "{F71E48D0-115A-4105-B332-FCCB2139DC23}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sandbox", "Sandbox", "{D067FB54-B69D-4502-8E2F-676271AC4B86}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Sandbox.WebServer", "tests\Katana.Sandbox.WebServer\Katana.Sandbox.WebServer.csproj", "{1069B86E-F2C1-498B-9DD8-76C7257C6A2A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Sandbox.WebClient", "tests\Katana.Sandbox.WebClient\Katana.Sandbox.WebClient.csproj", "{3AE67011-EBB1-4ADE-8F42-8E90EB884219}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OwinHost", "src\OwinHost\OwinHost.csproj", "{D56B8357-F044-45DE-85E9-41AA7C84751E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OwinHost.Tests", "tests\OwinHost.Tests\OwinHost.Tests.csproj", "{62ACEFEA-39F8-405E-BC25-0633F1770A4B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin", "src\Microsoft.Owin\Microsoft.Owin.csproj", "{0DB69CAE-B0BC-4688-9467-66B4C1023D3F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Owin.Loader", "src\Owin.Loader\Owin.Loader.csproj", "{DF967ED4-C320-421C-859C-81034EFF615E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Tests", "tests\Microsoft.Owin.Tests\Microsoft.Owin.Tests.csproj", "{0AF835A6-8181-46DB-A17E-C765FA07A5A0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Owin.Loader.Tests", "tests\Owin.Loader.Tests\Owin.Loader.Tests.csproj", "{13785347-FC73-4D0E-9DCA-300DD87C308E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Twitter", "src\Microsoft.Owin.Security.Twitter\Microsoft.Owin.Security.Twitter.csproj", "{BBB663CB-E6A2-4E23-83C9-9C8F52325F44}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.MicrosoftAccount", "src\Microsoft.Owin.Security.MicrosoftAccount\Microsoft.Owin.Security.MicrosoftAccount.csproj", "{52F6930F-FBC0-404B-B135-6B6756F5713A}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.Owin.SelfHost", "Microsoft.Owin.SelfHost", "{9298DB20-54F3-4078-8F7F-D95B3CFA1312}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
src\Microsoft.Owin.SelfHost\Microsoft.Owin.SelfHost.nuspec = src\Microsoft.Owin.SelfHost\Microsoft.Owin.SelfHost.nuspec
|
||||
src\Microsoft.Owin.SelfHost\ReadMe.txt = src\Microsoft.Owin.SelfHost\ReadMe.txt
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Hosting", "src\Microsoft.Owin.Hosting\Microsoft.Owin.Hosting.csproj", "{C225EB2F-E7A7-463F-B058-1705F204978E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Testing.Tests", "tests\Microsoft.Owin.Testing.Tests\Microsoft.Owin.Testing.Tests.csproj", "{628A8C89-5E59-4747-8D6A-AA22267552ED}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Middleware", "Middleware", "{C5F4B293-90EC-48B8-97FA-CD23C44C9C30}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Cors", "src\Microsoft.Owin.Cors\Microsoft.Owin.Cors.csproj", "{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Cors.Tests", "tests\Microsoft.Owin.Cors.Tests\Microsoft.Owin.Cors.Tests.csproj", "{3DDAC01B-2567-4C0C-88E1-0A716729203E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Katana.Performance.ReferenceApp.Client", "tests\Katana.Performance.ReferenceApp.Client\Katana.Performance.ReferenceApp.Client.csproj", "{0D370C5B-7518-4D60-9D47-1AD59794F38F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.Jwt", "src\Microsoft.Owin.Security.Jwt\Microsoft.Owin.Security.Jwt.csproj", "{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.ActiveDirectory", "src\Microsoft.Owin.Security.ActiveDirectory\Microsoft.Owin.Security.ActiveDirectory.csproj", "{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Nuget", ".Nuget", "{5230439B-C2AD-4A08-8927-526BA3BF9BF6}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.nuget\NuGet.Config = .nuget\NuGet.Config
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.WsFederation", "src\Microsoft.Owin.Security.WsFederation\Microsoft.Owin.Security.WsFederation.csproj", "{23D90C94-647A-416C-9227-9A0779401EBC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Owin.Security.OpenIdConnect", "src\Microsoft.Owin.Security.OpenIdConnect\Microsoft.Owin.Security.OpenIdConnect.csproj", "{AA80B4A3-C885-4A7E-AF1A-FC3E89611988}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{D74769C3-CC85-440E-BDB8-9B20BFBFDDAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D74769C3-CC85-440E-BDB8-9B20BFBFDDAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D74769C3-CC85-440E-BDB8-9B20BFBFDDAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A8FB7DCB-3370-4D2F-B41A-63C89D281A51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A8FB7DCB-3370-4D2F-B41A-63C89D281A51}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A8FB7DCB-3370-4D2F-B41A-63C89D281A51}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EE2FDC70-DA4E-448D-9852-E305516DF2DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EE2FDC70-DA4E-448D-9852-E305516DF2DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EE2FDC70-DA4E-448D-9852-E305516DF2DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EE2FDC70-DA4E-448D-9852-E305516DF2DD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C232AB29-2F3C-4E18-9234-67B1C70CDAD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C232AB29-2F3C-4E18-9234-67B1C70CDAD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C232AB29-2F3C-4E18-9234-67B1C70CDAD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C232AB29-2F3C-4E18-9234-67B1C70CDAD5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E38930BA-9F12-4609-B97C-55F08200A392}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E38930BA-9F12-4609-B97C-55F08200A392}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E38930BA-9F12-4609-B97C-55F08200A392}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E38930BA-9F12-4609-B97C-55F08200A392}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191911919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191911919}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191911919}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191911919}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191919191}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191919191}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191919191}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-123412341234}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-123412341234}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-123412341234}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F0C72D8-E43F-4F01-9DEB-123412341234}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{558F65BE-E09D-4A9B-9DA8-C0983445726F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{558F65BE-E09D-4A9B-9DA8-C0983445726F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{558F65BE-E09D-4A9B-9DA8-C0983445726F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{558F65BE-E09D-4A9B-9DA8-C0983445726F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8AE2E716-258A-4EF3-ADF1-D3B75D677F29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8AE2E716-258A-4EF3-ADF1-D3B75D677F29}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8AE2E716-258A-4EF3-ADF1-D3B75D677F29}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8AE2E716-258A-4EF3-ADF1-D3B75D677F29}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{473F6EEE-455F-4553-953D-5D0736D62D11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{473F6EEE-455F-4553-953D-5D0736D62D11}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{473F6EEE-455F-4553-953D-5D0736D62D11}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{473F6EEE-455F-4553-953D-5D0736D62D11}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{970E6B61-1204-422D-A258-BFAB2955243D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{970E6B61-1204-422D-A258-BFAB2955243D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{970E6B61-1204-422D-A258-BFAB2955243D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{970E6B61-1204-422D-A258-BFAB2955243D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{08B04766-9926-40DD-AEE9-6AA1F185272A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{08B04766-9926-40DD-AEE9-6AA1F185272A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{08B04766-9926-40DD-AEE9-6AA1F185272A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{08B04766-9926-40DD-AEE9-6AA1F185272A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{292742D5-D564-49B4-A682-948C3362F655}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{292742D5-D564-49B4-A682-948C3362F655}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{292742D5-D564-49B4-A682-948C3362F655}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{292742D5-D564-49B4-A682-948C3362F655}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F2882FE3-6F09-4B52-8592-EE1D127D12F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F2882FE3-6F09-4B52-8592-EE1D127D12F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F2882FE3-6F09-4B52-8592-EE1D127D12F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{670915F7-F111-42FF-B004-39379A9D5951}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{670915F7-F111-42FF-B004-39379A9D5951}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{670915F7-F111-42FF-B004-39379A9D5951}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{670915F7-F111-42FF-B004-39379A9D5951}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{75BCA849-0F1B-459E-9D63-DD875978EFD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{75BCA849-0F1B-459E-9D63-DD875978EFD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{75BCA849-0F1B-459E-9D63-DD875978EFD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{75BCA849-0F1B-459E-9D63-DD875978EFD0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5634B41F-719D-4210-991C-D29B097376FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5634B41F-719D-4210-991C-D29B097376FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5634B41F-719D-4210-991C-D29B097376FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5634B41F-719D-4210-991C-D29B097376FB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{63988A9B-FA70-4BBA-8C7E-784145384F7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{63988A9B-FA70-4BBA-8C7E-784145384F7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{63988A9B-FA70-4BBA-8C7E-784145384F7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{63988A9B-FA70-4BBA-8C7E-784145384F7C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5737FA14-B873-496B-8141-49D5B273AC3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5737FA14-B873-496B-8141-49D5B273AC3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5737FA14-B873-496B-8141-49D5B273AC3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5737FA14-B873-496B-8141-49D5B273AC3A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B8A42E18-F9E8-469B-86CC-30780B1F349C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B8A42E18-F9E8-469B-86CC-30780B1F349C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B8A42E18-F9E8-469B-86CC-30780B1F349C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B8A42E18-F9E8-469B-86CC-30780B1F349C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{56028FDD-DBD0-4A92-BE58-282105FA3C2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{56028FDD-DBD0-4A92-BE58-282105FA3C2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{56028FDD-DBD0-4A92-BE58-282105FA3C2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{56028FDD-DBD0-4A92-BE58-282105FA3C2A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0619D466-A21B-4B64-AC35-89299787DF12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0619D466-A21B-4B64-AC35-89299787DF12}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0619D466-A21B-4B64-AC35-89299787DF12}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0619D466-A21B-4B64-AC35-89299787DF12}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AAD8D4BF-9EA1-4662-B96D-0956BB21F718}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AAD8D4BF-9EA1-4662-B96D-0956BB21F718}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AAD8D4BF-9EA1-4662-B96D-0956BB21F718}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AAD8D4BF-9EA1-4662-B96D-0956BB21F718}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2FB9342F-CA85-4903-8667-45ED64AD25A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2FB9342F-CA85-4903-8667-45ED64AD25A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2FB9342F-CA85-4903-8667-45ED64AD25A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2FB9342F-CA85-4903-8667-45ED64AD25A6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AAAF8157-1E33-4D6C-8319-3B304D018005}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AAAF8157-1E33-4D6C-8319-3B304D018005}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AAAF8157-1E33-4D6C-8319-3B304D018005}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AAAF8157-1E33-4D6C-8319-3B304D018005}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E3B9A023-2146-4D9D-A806-1479683078AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E3B9A023-2146-4D9D-A806-1479683078AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E3B9A023-2146-4D9D-A806-1479683078AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E3B9A023-2146-4D9D-A806-1479683078AE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F6F1D34F-3AF6-41DD-B493-60899F959BBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F6F1D34F-3AF6-41DD-B493-60899F959BBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F6F1D34F-3AF6-41DD-B493-60899F959BBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F6F1D34F-3AF6-41DD-B493-60899F959BBA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1F46BC62-A011-4B63-A5C6-51AEE2EF538D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1F46BC62-A011-4B63-A5C6-51AEE2EF538D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1F46BC62-A011-4B63-A5C6-51AEE2EF538D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1F46BC62-A011-4B63-A5C6-51AEE2EF538D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F71E48D0-115A-4105-B332-FCCB2139DC23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F71E48D0-115A-4105-B332-FCCB2139DC23}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F71E48D0-115A-4105-B332-FCCB2139DC23}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F71E48D0-115A-4105-B332-FCCB2139DC23}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1069B86E-F2C1-498B-9DD8-76C7257C6A2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1069B86E-F2C1-498B-9DD8-76C7257C6A2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1069B86E-F2C1-498B-9DD8-76C7257C6A2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3AE67011-EBB1-4ADE-8F42-8E90EB884219}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3AE67011-EBB1-4ADE-8F42-8E90EB884219}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3AE67011-EBB1-4ADE-8F42-8E90EB884219}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3AE67011-EBB1-4ADE-8F42-8E90EB884219}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D56B8357-F044-45DE-85E9-41AA7C84751E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D56B8357-F044-45DE-85E9-41AA7C84751E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D56B8357-F044-45DE-85E9-41AA7C84751E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D56B8357-F044-45DE-85E9-41AA7C84751E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{62ACEFEA-39F8-405E-BC25-0633F1770A4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{62ACEFEA-39F8-405E-BC25-0633F1770A4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{62ACEFEA-39F8-405E-BC25-0633F1770A4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{62ACEFEA-39F8-405E-BC25-0633F1770A4B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0DB69CAE-B0BC-4688-9467-66B4C1023D3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0DB69CAE-B0BC-4688-9467-66B4C1023D3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0DB69CAE-B0BC-4688-9467-66B4C1023D3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0DB69CAE-B0BC-4688-9467-66B4C1023D3F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DF967ED4-C320-421C-859C-81034EFF615E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DF967ED4-C320-421C-859C-81034EFF615E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DF967ED4-C320-421C-859C-81034EFF615E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DF967ED4-C320-421C-859C-81034EFF615E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0AF835A6-8181-46DB-A17E-C765FA07A5A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0AF835A6-8181-46DB-A17E-C765FA07A5A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0AF835A6-8181-46DB-A17E-C765FA07A5A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0AF835A6-8181-46DB-A17E-C765FA07A5A0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{13785347-FC73-4D0E-9DCA-300DD87C308E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{13785347-FC73-4D0E-9DCA-300DD87C308E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{13785347-FC73-4D0E-9DCA-300DD87C308E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{13785347-FC73-4D0E-9DCA-300DD87C308E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BBB663CB-E6A2-4E23-83C9-9C8F52325F44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BBB663CB-E6A2-4E23-83C9-9C8F52325F44}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BBB663CB-E6A2-4E23-83C9-9C8F52325F44}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BBB663CB-E6A2-4E23-83C9-9C8F52325F44}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{52F6930F-FBC0-404B-B135-6B6756F5713A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{52F6930F-FBC0-404B-B135-6B6756F5713A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{52F6930F-FBC0-404B-B135-6B6756F5713A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{52F6930F-FBC0-404B-B135-6B6756F5713A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C225EB2F-E7A7-463F-B058-1705F204978E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C225EB2F-E7A7-463F-B058-1705F204978E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C225EB2F-E7A7-463F-B058-1705F204978E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C225EB2F-E7A7-463F-B058-1705F204978E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{628A8C89-5E59-4747-8D6A-AA22267552ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{628A8C89-5E59-4747-8D6A-AA22267552ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{628A8C89-5E59-4747-8D6A-AA22267552ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{628A8C89-5E59-4747-8D6A-AA22267552ED}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3DDAC01B-2567-4C0C-88E1-0A716729203E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3DDAC01B-2567-4C0C-88E1-0A716729203E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3DDAC01B-2567-4C0C-88E1-0A716729203E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3DDAC01B-2567-4C0C-88E1-0A716729203E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0D370C5B-7518-4D60-9D47-1AD59794F38F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0D370C5B-7518-4D60-9D47-1AD59794F38F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0D370C5B-7518-4D60-9D47-1AD59794F38F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0D370C5B-7518-4D60-9D47-1AD59794F38F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{23D90C94-647A-416C-9227-9A0779401EBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{23D90C94-647A-416C-9227-9A0779401EBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{23D90C94-647A-416C-9227-9A0779401EBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{23D90C94-647A-416C-9227-9A0779401EBC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AA80B4A3-C885-4A7E-AF1A-FC3E89611988}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AA80B4A3-C885-4A7E-AF1A-FC3E89611988}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AA80B4A3-C885-4A7E-AF1A-FC3E89611988}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AA80B4A3-C885-4A7E-AF1A-FC3E89611988}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{69D0ABFE-1C8A-4CFD-AF3A-D71445AEE6BF} = {D425FDFA-90FC-4276-8CBD-2850E8D78656}
|
||||
{D74769C3-CC85-440E-BDB8-9B20BFBFDDAE} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{D56B8357-F044-45DE-85E9-41AA7C84751E} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{62ACEFEA-39F8-405E-BC25-0633F1770A4B} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{DF967ED4-C320-421C-859C-81034EFF615E} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{13785347-FC73-4D0E-9DCA-300DD87C308E} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{9298DB20-54F3-4078-8F7F-D95B3CFA1312} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{C225EB2F-E7A7-463F-B058-1705F204978E} = {B9AC3489-752E-4C4E-84E4-1C82227435BA}
|
||||
{A8FB7DCB-3370-4D2F-B41A-63C89D281A51} = {E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}
|
||||
{9F0C72D8-E43F-4F01-9DEB-9E8FE0AE179E} = {E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191911919} = {E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}
|
||||
{9F0C72D8-E43F-4F01-9DEB-919191919191} = {E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}
|
||||
{9F0C72D8-E43F-4F01-9DEB-123412341234} = {E80B5DAB-7D94-4E26-8A9E-98E5A887A72A}
|
||||
{4EC1647A-7297-45BB-8E4A-9D9D8C301B57} = {A7292674-B84F-4D30-9E2D-C4885AF20608}
|
||||
{6F8D172A-4830-4ACB-BF0A-C82A5668A2CC} = {A7292674-B84F-4D30-9E2D-C4885AF20608}
|
||||
{ABC8FD67-E4C3-4236-AC51-280551470522} = {A7292674-B84F-4D30-9E2D-C4885AF20608}
|
||||
{47488541-F6D1-4385-AE49-7E3C72042521} = {A7292674-B84F-4D30-9E2D-C4885AF20608}
|
||||
{292742D5-D564-49B4-A682-948C3362F655} = {4EC1647A-7297-45BB-8E4A-9D9D8C301B57}
|
||||
{F2882FE3-6F09-4B52-8592-EE1D127D12F4} = {4EC1647A-7297-45BB-8E4A-9D9D8C301B57}
|
||||
{B8A42E18-F9E8-469B-86CC-30780B1F349C} = {6F8D172A-4830-4ACB-BF0A-C82A5668A2CC}
|
||||
{56028FDD-DBD0-4A92-BE58-282105FA3C2A} = {6F8D172A-4830-4ACB-BF0A-C82A5668A2CC}
|
||||
{EE2FDC70-DA4E-448D-9852-E305516DF2DD} = {6F8D172A-4830-4ACB-BF0A-C82A5668A2CC}
|
||||
{970E6B61-1204-422D-A258-BFAB2955243D} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{08B04766-9926-40DD-AEE9-6AA1F185272A} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{75BCA849-0F1B-459E-9D63-DD875978EFD0} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{5634B41F-719D-4210-991C-D29B097376FB} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{0619D466-A21B-4B64-AC35-89299787DF12} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{AAD8D4BF-9EA1-4662-B96D-0956BB21F718} = {ABC8FD67-E4C3-4236-AC51-280551470522}
|
||||
{C232AB29-2F3C-4E18-9234-67B1C70CDAD5} = {923FBCC6-ACE8-462C-ACE1-927C3EC8E77B}
|
||||
{E38930BA-9F12-4609-B97C-55F08200A392} = {923FBCC6-ACE8-462C-ACE1-927C3EC8E77B}
|
||||
{8AE2E716-258A-4EF3-ADF1-D3B75D677F29} = {923FBCC6-ACE8-462C-ACE1-927C3EC8E77B}
|
||||
{0D370C5B-7518-4D60-9D47-1AD59794F38F} = {923FBCC6-ACE8-462C-ACE1-927C3EC8E77B}
|
||||
{558F65BE-E09D-4A9B-9DA8-C0983445726F} = {47488541-F6D1-4385-AE49-7E3C72042521}
|
||||
{473F6EEE-455F-4553-953D-5D0736D62D11} = {C5F4B293-90EC-48B8-97FA-CD23C44C9C30}
|
||||
{F31A42DB-2F57-4DAC-B2BC-106F2D6F3C82} = {C5F4B293-90EC-48B8-97FA-CD23C44C9C30}
|
||||
{CD4593FD-F70C-4485-ACAD-AC69DAD1BBB1} = {C5F4B293-90EC-48B8-97FA-CD23C44C9C30}
|
||||
{3DDAC01B-2567-4C0C-88E1-0A716729203E} = {C5F4B293-90EC-48B8-97FA-CD23C44C9C30}
|
||||
{670915F7-F111-42FF-B004-39379A9D5951} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{63988A9B-FA70-4BBA-8C7E-784145384F7C} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{5737FA14-B873-496B-8141-49D5B273AC3A} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{73F1A72C-BCDE-4912-8AF7-6BE33D92FCC0} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{0DB69CAE-B0BC-4688-9467-66B4C1023D3F} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{0AF835A6-8181-46DB-A17E-C765FA07A5A0} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{628A8C89-5E59-4747-8D6A-AA22267552ED} = {E7D2B8A2-4586-4660-BB84-E46A58CD5F7F}
|
||||
{2FB9342F-CA85-4903-8667-45ED64AD25A6} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{AAAF8157-1E33-4D6C-8319-3B304D018005} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{E3B9A023-2146-4D9D-A806-1479683078AE} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{F6F1D34F-3AF6-41DD-B493-60899F959BBA} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{1F46BC62-A011-4B63-A5C6-51AEE2EF538D} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{F71E48D0-115A-4105-B332-FCCB2139DC23} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{BBB663CB-E6A2-4E23-83C9-9C8F52325F44} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{52F6930F-FBC0-404B-B135-6B6756F5713A} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{CC7E3A76-37B0-4C3D-B666-62DC34F04ABC} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{03F2BF9F-BE6C-4DAE-9615-46A7F05EF842} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{23D90C94-647A-416C-9227-9A0779401EBC} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{AA80B4A3-C885-4A7E-AF1A-FC3E89611988} = {10A4935F-4C17-44ED-BB00-D044FC7C77B8}
|
||||
{1069B86E-F2C1-498B-9DD8-76C7257C6A2A} = {D067FB54-B69D-4502-8E2F-676271AC4B86}
|
||||
{3AE67011-EBB1-4ADE-8F42-8E90EB884219} = {D067FB54-B69D-4502-8E2F-676271AC4B86}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -1,103 +1,137 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth.Messages
|
||||
{
|
||||
/// <summary>
|
||||
/// Data object representing the information contained in the query string of an Authorize endpoint request.
|
||||
/// </summary>
|
||||
public class AuthorizeEndpointRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new instance populated with values from the query string parameters.
|
||||
/// </summary>
|
||||
/// <param name="parameters">Query string parameters from a request.</param>
|
||||
public AuthorizeEndpointRequest(IReadableStringCollection parameters)
|
||||
{
|
||||
if (parameters == null)
|
||||
{
|
||||
throw new ArgumentNullException("parameters");
|
||||
}
|
||||
|
||||
Scope = new List<string>();
|
||||
|
||||
foreach (var parameter in parameters)
|
||||
{
|
||||
AddParameter(parameter.Key, parameters.Get(parameter.Key));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The "response_type" query string parameter of the Authorize request. Known values are "code" and "token".
|
||||
/// </summary>
|
||||
public string ResponseType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The "client_id" query string parameter of the Authorize request.
|
||||
/// </summary>
|
||||
public string ClientId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The "redirect_uri" query string parameter of the Authorize request. May be absent if the server should use the
|
||||
/// redirect uri known to be registered to the client id.
|
||||
/// </summary>
|
||||
[SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings", Justification = "By design")]
|
||||
public string RedirectUri { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The "scope" query string parameter of the Authorize request. May be absent if the server should use default scopes.
|
||||
/// </summary>
|
||||
public IList<string> Scope { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The "scope" query string parameter of the Authorize request. May be absent if the client does not require state to be
|
||||
/// included when returning to the RedirectUri.
|
||||
/// </summary>
|
||||
public string State { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// True if the "response_type" query string parameter is "code".
|
||||
/// See also, http://tools.ietf.org/html/rfc6749#section-4.1.1
|
||||
/// </summary>
|
||||
public bool IsAuthorizationCodeGrantType
|
||||
{
|
||||
get { return string.Equals(ResponseType, Constants.ResponseTypes.Code, StringComparison.Ordinal); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// True if the "response_type" query string parameter is "token".
|
||||
/// See also, http://tools.ietf.org/html/rfc6749#section-4.2.1
|
||||
/// </summary>
|
||||
public bool IsImplicitGrantType
|
||||
{
|
||||
get { return string.Equals(ResponseType, Constants.ResponseTypes.Token, StringComparison.Ordinal); }
|
||||
}
|
||||
|
||||
private void AddParameter(string name, string value)
|
||||
{
|
||||
if (string.Equals(name, Constants.Parameters.ResponseType, StringComparison.Ordinal))
|
||||
{
|
||||
ResponseType = value;
|
||||
}
|
||||
else if (string.Equals(name, Constants.Parameters.ClientId, StringComparison.Ordinal))
|
||||
{
|
||||
ClientId = value;
|
||||
}
|
||||
else if (string.Equals(name, Constants.Parameters.RedirectUri, StringComparison.Ordinal))
|
||||
{
|
||||
RedirectUri = value;
|
||||
}
|
||||
else if (string.Equals(name, Constants.Parameters.Scope, StringComparison.Ordinal))
|
||||
{
|
||||
Scope = value.Split(' ');
|
||||
}
|
||||
else if (string.Equals(name, Constants.Parameters.State, StringComparison.Ordinal))
|
||||
{
|
||||
State = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth.Messages
|
||||
{
|
||||
/// <summary>
|
||||
/// Data object representing the information contained in the query string of an Authorize endpoint request.
|
||||
/// </summary>
|
||||
public class AuthorizeEndpointRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new instance populated with values from the query string parameters.
|
||||
/// </summary>
|
||||
/// <param name="parameters">Query string parameters from a request.</param>
|
||||
public AuthorizeEndpointRequest(IReadableStringCollection parameters)
|
||||
{
|
||||
if (parameters == null)
|
||||
{
|
||||
throw new ArgumentNullException("parameters");
|
||||
}
|
||||
|
||||
Scope = new List<string>();
|
||||
|
||||
foreach (var parameter in parameters)
|
||||
{
|
||||
AddParameter(parameter.Key, parameters.Get(parameter.Key));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The "response_type" query string parameter of the Authorize request. Known values are "code" and "token".
|
||||
/// </summary>
|
||||
public string ResponseType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The "response_mode" query string parameter of the Authorize request. Known values are "query", "fragment" and "form_post"
|
||||
/// See also, http://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html
|
||||
/// </summary>
|
||||
public string ResponseMode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The "client_id" query string parameter of the Authorize request.
|
||||
/// </summary>
|
||||
public string ClientId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The "redirect_uri" query string parameter of the Authorize request. May be absent if the server should use the
|
||||
/// redirect uri known to be registered to the client id.
|
||||
/// </summary>
|
||||
[SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings", Justification = "By design")]
|
||||
public string RedirectUri { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The "scope" query string parameter of the Authorize request. May be absent if the server should use default scopes.
|
||||
/// </summary>
|
||||
public IList<string> Scope { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The "scope" query string parameter of the Authorize request. May be absent if the client does not require state to be
|
||||
/// included when returning to the RedirectUri.
|
||||
/// </summary>
|
||||
public string State { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// True if the "response_type" query string contains the passed responseType.
|
||||
/// See also, http://openid.net/specs/oauth-v2-multiple-response-types-1_0.html
|
||||
/// </summary>
|
||||
/// <param name="responseType">The responseType that is expected within the "response_type" query string</param>
|
||||
/// <returns>True if the "response_type" query string contains the passed responseType.</returns>
|
||||
public bool ContainsGrantType(string responseType)
|
||||
{
|
||||
var parts = ResponseType.Split(' ');
|
||||
foreach (var part in parts)
|
||||
{
|
||||
if (string.Equals(part, responseType, StringComparison.Ordinal))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// True if the "response_type" query string parameter is "code".
|
||||
/// See also, http://tools.ietf.org/html/rfc6749#section-4.1.1
|
||||
/// </summary>
|
||||
public bool IsAuthorizationCodeGrantType
|
||||
{
|
||||
get { return ContainsGrantType(Constants.ResponseTypes.Code); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// True if the "response_type" query string parameter is "token".
|
||||
/// See also, http://tools.ietf.org/html/rfc6749#section-4.2.1
|
||||
/// </summary>
|
||||
public bool IsImplicitGrantType
|
||||
{
|
||||
get { return ContainsGrantType(Constants.ResponseTypes.Token); }
|
||||
}
|
||||
|
||||
public bool IsFormPostResponseMode
|
||||
{
|
||||
get { return string.Equals(ResponseMode, Constants.ResponseModes.FormPost, StringComparison.Ordinal); }
|
||||
}
|
||||
|
||||
private void AddParameter(string name, string value)
|
||||
{
|
||||
if (string.Equals(name, Constants.Parameters.ResponseType, StringComparison.Ordinal))
|
||||
{
|
||||
ResponseType = value;
|
||||
}
|
||||
else if (string.Equals(name, Constants.Parameters.ClientId, StringComparison.Ordinal))
|
||||
{
|
||||
ClientId = value;
|
||||
}
|
||||
else if (string.Equals(name, Constants.Parameters.RedirectUri, StringComparison.Ordinal))
|
||||
{
|
||||
RedirectUri = value;
|
||||
}
|
||||
else if (string.Equals(name, Constants.Parameters.Scope, StringComparison.Ordinal))
|
||||
{
|
||||
Scope = value.Split(' ');
|
||||
}
|
||||
else if (string.Equals(name, Constants.Parameters.State, StringComparison.Ordinal))
|
||||
{
|
||||
State = value;
|
||||
}
|
||||
else if (string.Equals(name, Constants.Parameters.ResponseMode, StringComparison.Ordinal))
|
||||
{
|
||||
ResponseMode = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,124 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{F71E48D0-115A-4105-B332-FCCB2139DC23}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Microsoft.Owin.Security.OAuth</RootNamespace>
|
||||
<AssemblyName>Microsoft.Owin.Security.OAuth</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;CODE_ANALYSIS;AUTHSERVER</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
<CodeAnalysisRuleSet>..\..\build\CodeAnalysis.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;AUTHSERVER</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>bin\Release\Microsoft.Owin.Security.OAuth.XML</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.IdentityModel" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\..\build\CommonAssemblyInfo.cs">
|
||||
<Link>Properties\CommonAssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Messages\TokenEndpointRequestCustomExtension.cs" />
|
||||
<Compile Include="Messages\TokenEndpointRequestRefreshToken.cs" />
|
||||
<Compile Include="Messages\TokenEndpointRequestAuthorizationCode.cs" />
|
||||
<Compile Include="Messages\AuthorizeEndpointRequest.cs" />
|
||||
<Compile Include="Messages\TokenEndpointRequest.cs" />
|
||||
<Compile Include="Messages\TokenEndpointRequestClientCredentials.cs" />
|
||||
<Compile Include="Messages\TokenEndpointRequestResourceOwnerPasswordCredentials.cs" />
|
||||
<Compile Include="OAuthAuthorizationServerHandler.cs" />
|
||||
<Compile Include="OAuthAuthorizationServerExtensions.cs" />
|
||||
<Compile Include="OAuthAuthorizationServerOptions.cs" />
|
||||
<Compile Include="OAuthAuthorizationServerMiddleware.cs" />
|
||||
<Compile Include="OAuthBearerAuthenticationHandler.cs" />
|
||||
<Compile Include="OAuthBearerAuthenticationExtensions.cs" />
|
||||
<Compile Include="OAuthBearerAuthenticationMiddleware.cs" />
|
||||
<Compile Include="OAuthBearerAuthenticationOptions.cs" />
|
||||
<Compile Include="OAuthConstants.cs" />
|
||||
<Compile Include="OAuthDefaults.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Provider\BaseValidatingClientContext.cs" />
|
||||
<Compile Include="Provider\BaseValidatingContext.cs" />
|
||||
<Compile Include="Provider\BaseValidatingTicketContext.cs" />
|
||||
<Compile Include="Provider\DefaultBehavior.cs" />
|
||||
<Compile Include="Provider\OAuthAuthorizeEndpointContext.cs" />
|
||||
<Compile Include="Provider\IOAuthAuthorizationServerProvider.cs" />
|
||||
<Compile Include="Provider\OAuthAuthorizationServerProvider.cs" />
|
||||
<Compile Include="Provider\OAuthBearerAuthenticationProvider.cs" />
|
||||
<Compile Include="Provider\OAuthChallengeContext.cs" />
|
||||
<Compile Include="Provider\OAuthGrantAuthorizationCodeContext.cs" />
|
||||
<Compile Include="Provider\OAuthGrantRefreshTokenContext.cs" />
|
||||
<Compile Include="Provider\OAuthRequestTokenContext.cs" />
|
||||
<Compile Include="Provider\OAuthValidateClientAuthenticationContext.cs" />
|
||||
<Compile Include="Provider\OAuthMatchEndpointContext.cs" />
|
||||
<Compile Include="Provider\OAuthTokenEndpointContext.cs" />
|
||||
<Compile Include="Provider\OAuthGrantClientCredentialsContext.cs" />
|
||||
<Compile Include="Provider\OAuthGrantCustomExtensionContext.cs" />
|
||||
<Compile Include="Provider\OAuthValidateAuthorizeRequestContext.cs" />
|
||||
<Compile Include="Provider\OAuthValidateClientRedirectUriContext.cs" />
|
||||
<Compile Include="Provider\OAuthValidateIdentityContext.cs" />
|
||||
<Compile Include="Provider\IOAuthBearerAuthenticationProvider.cs" />
|
||||
<Compile Include="Provider\OAuthGrantResourceOwnerCredentialsContext.cs" />
|
||||
<Compile Include="Provider\OAuthValidateTokenRequestContext.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Microsoft.Owin.Security.OAuth.nuspec" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Microsoft.Owin.Security\Microsoft.Owin.Security.csproj">
|
||||
<Project>{AAAF8157-1E33-4D6C-8319-3B304D018005}</Project>
|
||||
<Name>Microsoft.Owin.Security</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Microsoft.Owin\Microsoft.Owin.csproj">
|
||||
<Project>{0db69cae-b0bc-4688-9467-66b4c1023d3f}</Project>
|
||||
<Name>Microsoft.Owin</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CodeAnalysisDictionary Include="CustomDictionary.xml" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(ProjectDir)..\..\build\Common.targets" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{F71E48D0-115A-4105-B332-FCCB2139DC23}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Microsoft.Owin.Security.OAuth</RootNamespace>
|
||||
<AssemblyName>Microsoft.Owin.Security.OAuth</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;CODE_ANALYSIS;AUTHSERVER</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
<CodeAnalysisRuleSet>..\..\build\CodeAnalysis.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;AUTHSERVER</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>bin\Release\Microsoft.Owin.Security.OAuth.XML</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.IdentityModel" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\..\build\CommonAssemblyInfo.cs">
|
||||
<Link>Properties\CommonAssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Messages\TokenEndpointRequestCustomExtension.cs" />
|
||||
<Compile Include="Messages\TokenEndpointRequestRefreshToken.cs" />
|
||||
<Compile Include="Messages\TokenEndpointRequestAuthorizationCode.cs" />
|
||||
<Compile Include="Messages\AuthorizeEndpointRequest.cs" />
|
||||
<Compile Include="Messages\TokenEndpointRequest.cs" />
|
||||
<Compile Include="Messages\TokenEndpointRequestClientCredentials.cs" />
|
||||
<Compile Include="Messages\TokenEndpointRequestResourceOwnerPasswordCredentials.cs" />
|
||||
<Compile Include="OAuthAuthorizationServerHandler.cs" />
|
||||
<Compile Include="OAuthAuthorizationServerExtensions.cs" />
|
||||
<Compile Include="OAuthAuthorizationServerOptions.cs" />
|
||||
<Compile Include="OAuthAuthorizationServerMiddleware.cs" />
|
||||
<Compile Include="OAuthBearerAuthenticationHandler.cs" />
|
||||
<Compile Include="OAuthBearerAuthenticationExtensions.cs" />
|
||||
<Compile Include="OAuthBearerAuthenticationMiddleware.cs" />
|
||||
<Compile Include="OAuthBearerAuthenticationOptions.cs" />
|
||||
<Compile Include="OAuthConstants.cs" />
|
||||
<Compile Include="OAuthDefaults.cs" />
|
||||
<Compile Include="Provider\OAuthTokenEndpointResponseContext.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Provider\BaseValidatingClientContext.cs" />
|
||||
<Compile Include="Provider\BaseValidatingContext.cs" />
|
||||
<Compile Include="Provider\BaseValidatingTicketContext.cs" />
|
||||
<Compile Include="Provider\DefaultBehavior.cs" />
|
||||
<Compile Include="Provider\OAuthAuthorizeEndpointResponseContext.cs" />
|
||||
<Compile Include="Provider\OAuthAuthorizeEndpointContext.cs" />
|
||||
<Compile Include="Provider\IOAuthAuthorizationServerProvider.cs" />
|
||||
<Compile Include="Provider\OAuthAuthorizationServerProvider.cs" />
|
||||
<Compile Include="Provider\OAuthBearerAuthenticationProvider.cs" />
|
||||
<Compile Include="Provider\OAuthChallengeContext.cs" />
|
||||
<Compile Include="Provider\OAuthGrantAuthorizationCodeContext.cs" />
|
||||
<Compile Include="Provider\OAuthGrantRefreshTokenContext.cs" />
|
||||
<Compile Include="Provider\OAuthRequestTokenContext.cs" />
|
||||
<Compile Include="Provider\OAuthValidateClientAuthenticationContext.cs" />
|
||||
<Compile Include="Provider\OAuthMatchEndpointContext.cs" />
|
||||
<Compile Include="Provider\OAuthTokenEndpointContext.cs" />
|
||||
<Compile Include="Provider\OAuthGrantClientCredentialsContext.cs" />
|
||||
<Compile Include="Provider\OAuthGrantCustomExtensionContext.cs" />
|
||||
<Compile Include="Provider\OAuthValidateAuthorizeRequestContext.cs" />
|
||||
<Compile Include="Provider\OAuthValidateClientRedirectUriContext.cs" />
|
||||
<Compile Include="Provider\OAuthValidateIdentityContext.cs" />
|
||||
<Compile Include="Provider\IOAuthBearerAuthenticationProvider.cs" />
|
||||
<Compile Include="Provider\OAuthGrantResourceOwnerCredentialsContext.cs" />
|
||||
<Compile Include="Provider\OAuthValidateTokenRequestContext.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Microsoft.Owin.Security.OAuth.nuspec" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Microsoft.Owin.Security\Microsoft.Owin.Security.csproj">
|
||||
<Project>{AAAF8157-1E33-4D6C-8319-3B304D018005}</Project>
|
||||
<Name>Microsoft.Owin.Security</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Microsoft.Owin\Microsoft.Owin.csproj">
|
||||
<Project>{0db69cae-b0bc-4688-9467-66b4c1023d3f}</Project>
|
||||
<Name>Microsoft.Owin</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CodeAnalysisDictionary Include="CustomDictionary.xml" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(ProjectDir)..\..\build\Common.targets" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
|
@ -12,6 +13,7 @@ using Microsoft.Owin.Security.Infrastructure;
|
|||
using Microsoft.Owin.Security.OAuth.Messages;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
internal class OAuthAuthorizationServerHandler : AuthenticationHandler<OAuthAuthorizationServerOptions>
|
||||
|
@ -172,7 +174,7 @@ namespace Microsoft.Owin.Security.OAuth
|
|||
return;
|
||||
}
|
||||
|
||||
string location = _clientContext.RedirectUri;
|
||||
var returnParameter = new Dictionary<string, string>();
|
||||
|
||||
if (_authorizeEndpointRequest.IsAuthorizationCodeGrantType)
|
||||
{
|
||||
|
@ -204,15 +206,51 @@ namespace Microsoft.Owin.Security.OAuth
|
|||
await SendErrorRedirectAsync(_clientContext, errorContext);
|
||||
}
|
||||
|
||||
location = WebUtilities.AddQueryString(location, Constants.Parameters.Code, code);
|
||||
var authResponseContext = new OAuthAuthorizationEndpointResponseContext(
|
||||
Context,
|
||||
Options,
|
||||
new AuthenticationTicket(signin.Identity, signin.Properties),
|
||||
_authorizeEndpointRequest,
|
||||
null,
|
||||
code);
|
||||
|
||||
await Options.Provider.AuthorizationEndpointResponse(authResponseContext);
|
||||
|
||||
foreach (var parameter in authResponseContext.AdditionalResponseParameters)
|
||||
{
|
||||
returnParameter[parameter.Key] = parameter.Value.ToString();
|
||||
}
|
||||
|
||||
returnParameter[Constants.Parameters.Code] = code;
|
||||
|
||||
if (!String.IsNullOrEmpty(_authorizeEndpointRequest.State))
|
||||
{
|
||||
location = WebUtilities.AddQueryString(location, Constants.Parameters.State, _authorizeEndpointRequest.State);
|
||||
returnParameter[Constants.Parameters.State] = _authorizeEndpointRequest.State;
|
||||
}
|
||||
|
||||
string location = "";
|
||||
if (_authorizeEndpointRequest.IsFormPostResponseMode)
|
||||
{
|
||||
location = Options.FormPostEndpoint.ToString();
|
||||
returnParameter[Constants.Parameters.RedirectUri] = _clientContext.RedirectUri;
|
||||
}
|
||||
else
|
||||
{
|
||||
location = _clientContext.RedirectUri;
|
||||
}
|
||||
|
||||
foreach (var key in returnParameter.Keys)
|
||||
{
|
||||
location = WebUtilities.AddQueryString(location, key, returnParameter[key]);
|
||||
}
|
||||
|
||||
Response.Redirect(location);
|
||||
}
|
||||
else if (_authorizeEndpointRequest.IsImplicitGrantType)
|
||||
{
|
||||
|
||||
string location = _clientContext.RedirectUri;
|
||||
|
||||
DateTimeOffset currentUtc = Options.SystemClock.UtcNow;
|
||||
signin.Properties.IssuedUtc = currentUtc;
|
||||
signin.Properties.ExpiresUtc = currentUtc.Add(Options.AccessTokenExpireTimeSpan);
|
||||
|
@ -249,10 +287,28 @@ namespace Microsoft.Owin.Security.OAuth
|
|||
{
|
||||
appender.Append(Constants.Parameters.State, _authorizeEndpointRequest.State);
|
||||
}
|
||||
|
||||
var authResponseContext = new OAuthAuthorizationEndpointResponseContext(
|
||||
Context,
|
||||
Options,
|
||||
new AuthenticationTicket(signin.Identity, signin.Properties),
|
||||
_authorizeEndpointRequest,
|
||||
accessToken,
|
||||
null);
|
||||
|
||||
await Options.Provider.AuthorizationEndpointResponse(authResponseContext);
|
||||
|
||||
foreach (var parameter in authResponseContext.AdditionalResponseParameters)
|
||||
{
|
||||
appender.Append(parameter.Key, parameter.Value.ToString());
|
||||
}
|
||||
|
||||
Response.Redirect(appender.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private async Task InvokeTokenEndpointAsync()
|
||||
{
|
||||
DateTimeOffset currentUtc = Options.SystemClock.UtcNow;
|
||||
|
@ -375,6 +431,16 @@ namespace Microsoft.Owin.Security.OAuth
|
|||
await Options.RefreshTokenProvider.CreateAsync(refreshTokenCreateContext);
|
||||
string refreshToken = refreshTokenCreateContext.Token;
|
||||
|
||||
var tokenEndpointResponseContext = new OAuthTokenEndpointResponseContext(
|
||||
Context,
|
||||
Options,
|
||||
ticket,
|
||||
tokenEndpointRequest,
|
||||
accessToken,
|
||||
tokenEndpointContext.AdditionalResponseParameters);
|
||||
|
||||
await Options.Provider.TokenEndpointResponse(tokenEndpointResponseContext);
|
||||
|
||||
var memory = new MemoryStream();
|
||||
byte[] body;
|
||||
using (var writer = new JsonTextWriter(new StreamWriter(memory)))
|
||||
|
@ -399,7 +465,7 @@ namespace Microsoft.Owin.Security.OAuth
|
|||
writer.WritePropertyName(Constants.Parameters.RefreshToken);
|
||||
writer.WriteValue(refreshToken);
|
||||
}
|
||||
foreach (var additionalResponseParameter in tokenEndpointContext.AdditionalResponseParameters)
|
||||
foreach (var additionalResponseParameter in tokenEndpointResponseContext.AdditionalResponseParameters)
|
||||
{
|
||||
writer.WritePropertyName(additionalResponseParameter.Key);
|
||||
writer.WriteValue(additionalResponseParameter.Value);
|
||||
|
|
|
@ -1,124 +1,131 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.Owin.Infrastructure;
|
||||
using Microsoft.Owin.Security.Infrastructure;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
/// <summary>
|
||||
/// Options class provides information needed to control Authorization Server middleware behavior
|
||||
/// </summary>
|
||||
public class OAuthAuthorizationServerOptions : AuthenticationOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates an instance of authorization server options with default values.
|
||||
/// </summary>
|
||||
public OAuthAuthorizationServerOptions()
|
||||
: base(OAuthDefaults.AuthenticationType)
|
||||
{
|
||||
AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(5);
|
||||
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(20);
|
||||
SystemClock = new SystemClock();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The request path where client applications will redirect the user-agent in order to
|
||||
/// obtain user consent to issue a token. Must begin with a leading slash, like "/Authorize".
|
||||
/// </summary>
|
||||
public PathString AuthorizeEndpointPath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The request path client applications communicate with directly as part of the OAuth protocol.
|
||||
/// Must begin with a leading slash, like "/Token". If the client is issued a client_secret, it must
|
||||
/// be provided to this endpoint.
|
||||
/// </summary>
|
||||
public PathString TokenEndpointPath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The object provided by the application to process events raised by the Authorization Server middleware.
|
||||
/// The application may implement the interface fully, or it may create an instance of OAuthAuthorizationServerProvider
|
||||
/// and assign delegates only to the events it wants to process.
|
||||
/// </summary>
|
||||
public IOAuthAuthorizationServerProvider Provider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The data format used to protect and unprotect the information contained in the authorization code.
|
||||
/// If not provided by the application the default data protection provider depends on the host server.
|
||||
/// The SystemWeb host on IIS will use ASP.NET machine key data protection, and HttpListener and other self-hosted
|
||||
/// servers will use DPAPI data protection.
|
||||
/// </summary>
|
||||
public ISecureDataFormat<AuthenticationTicket> AuthorizationCodeFormat { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The data format used to protect the information contained in the access token.
|
||||
/// If not provided by the application the default data protection provider depends on the host server.
|
||||
/// The SystemWeb host on IIS will use ASP.NET machine key data protection, and HttpListener and other self-hosted
|
||||
/// servers will use DPAPI data protection. If a different access token
|
||||
/// provider or format is assigned, a compatible instance must be assigned to the OAuthBearerAuthenticationOptions.AccessTokenProvider
|
||||
/// or OAuthBearerAuthenticationOptions.AccessTokenFormat property of the resource server.
|
||||
/// </summary>
|
||||
public ISecureDataFormat<AuthenticationTicket> AccessTokenFormat { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The data format used to protect and unprotect the information contained in the refresh token.
|
||||
/// If not provided by the application the default data protection provider depends on the host server.
|
||||
/// The SystemWeb host on IIS will use ASP.NET machine key data protection, and HttpListener and other self-hosted
|
||||
/// servers will use DPAPI data protection.
|
||||
/// </summary>
|
||||
public ISecureDataFormat<AuthenticationTicket> RefreshTokenFormat { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The period of time the authorization code remains valid after being issued. The default is five minutes.
|
||||
/// This time span must also take into account clock synchronization between servers in a web farm, so a very
|
||||
/// brief value could result in unexpectedly expired tokens.
|
||||
/// </summary>
|
||||
public TimeSpan AuthorizationCodeExpireTimeSpan { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The period of time the access token remains valid after being issued. The default is twenty minutes.
|
||||
/// The client application is expected to refresh or acquire a new access token after the token has expired.
|
||||
/// </summary>
|
||||
public TimeSpan AccessTokenExpireTimeSpan { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Produces a single-use authorization code to return to the client application. For the OAuth server to be secure the
|
||||
/// application MUST provide an instance for AuthorizationCodeProvider where the token produced by the OnCreate or OnCreateAsync event
|
||||
/// is considered valid for only one call to OnReceive or OnReceiveAsync.
|
||||
/// </summary>
|
||||
public IAuthenticationTokenProvider AuthorizationCodeProvider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Produces a bearer token the client application will typically be providing to resource server as the authorization bearer
|
||||
/// http request header. If not provided the token produced on the server's default data protection. If a different access token
|
||||
/// provider or format is assigned, a compatible instance must be assigned to the OAuthBearerAuthenticationOptions.AccessTokenProvider
|
||||
/// or OAuthBearerAuthenticationOptions.AccessTokenFormat property of the resource server.
|
||||
/// </summary>
|
||||
public IAuthenticationTokenProvider AccessTokenProvider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Produces a refresh token which may be used to produce a new access token when needed. If not provided the authorization server will
|
||||
/// not return refresh tokens from the /Token endpoint.
|
||||
/// </summary>
|
||||
public IAuthenticationTokenProvider RefreshTokenProvider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Set to true if the web application is able to render error messages on the /Authorize endpoint. This is only needed for cases where
|
||||
/// the browser is not redirected back to the client application, for example, when the client_id or redirect_uri are incorrect. The
|
||||
/// /Authorize endpoint should expect to see "oauth.Error", "oauth.ErrorDescription", "oauth.ErrorUri" properties added to the owin environment.
|
||||
/// </summary>
|
||||
public bool ApplicationCanDisplayErrors { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Used to know what the current clock time is when calculating or validating token expiration. When not assigned default is based on
|
||||
/// DateTimeOffset.UtcNow. This is typically needed only for unit testing.
|
||||
/// </summary>
|
||||
public ISystemClock SystemClock { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// True to allow authorize and token requests to arrive on http URI addresses, and to allow incoming
|
||||
/// redirect_uri authorize request parameter to have http URI addresses.
|
||||
/// </summary>
|
||||
public bool AllowInsecureHttp { get; set; }
|
||||
}
|
||||
}
|
||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.Owin.Infrastructure;
|
||||
using Microsoft.Owin.Security.Infrastructure;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
/// <summary>
|
||||
/// Options class provides information needed to control Authorization Server middleware behavior
|
||||
/// </summary>
|
||||
public class OAuthAuthorizationServerOptions : AuthenticationOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates an instance of authorization server options with default values.
|
||||
/// </summary>
|
||||
public OAuthAuthorizationServerOptions()
|
||||
: base(OAuthDefaults.AuthenticationType)
|
||||
{
|
||||
AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(5);
|
||||
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(20);
|
||||
SystemClock = new SystemClock();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The request path where client applications will redirect the user-agent in order to
|
||||
/// obtain user consent to issue a token. Must begin with a leading slash, like "/Authorize".
|
||||
/// </summary>
|
||||
public PathString AuthorizeEndpointPath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The request path client applications communicate with directly as part of the OAuth protocol.
|
||||
/// Must begin with a leading slash, like "/Token". If the client is issued a client_secret, it must
|
||||
/// be provided to this endpoint.
|
||||
/// </summary>
|
||||
public PathString TokenEndpointPath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The object provided by the application to process events raised by the Authorization Server middleware.
|
||||
/// The application may implement the interface fully, or it may create an instance of OAuthAuthorizationServerProvider
|
||||
/// and assign delegates only to the events it wants to process.
|
||||
/// </summary>
|
||||
public IOAuthAuthorizationServerProvider Provider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The data format used to protect and unprotect the information contained in the authorization code.
|
||||
/// If not provided by the application the default data protection provider depends on the host server.
|
||||
/// The SystemWeb host on IIS will use ASP.NET machine key data protection, and HttpListener and other self-hosted
|
||||
/// servers will use DPAPI data protection.
|
||||
/// </summary>
|
||||
public ISecureDataFormat<AuthenticationTicket> AuthorizationCodeFormat { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The data format used to protect the information contained in the access token.
|
||||
/// If not provided by the application the default data protection provider depends on the host server.
|
||||
/// The SystemWeb host on IIS will use ASP.NET machine key data protection, and HttpListener and other self-hosted
|
||||
/// servers will use DPAPI data protection. If a different access token
|
||||
/// provider or format is assigned, a compatible instance must be assigned to the OAuthBearerAuthenticationOptions.AccessTokenProvider
|
||||
/// or OAuthBearerAuthenticationOptions.AccessTokenFormat property of the resource server.
|
||||
/// </summary>
|
||||
public ISecureDataFormat<AuthenticationTicket> AccessTokenFormat { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The data format used to protect and unprotect the information contained in the refresh token.
|
||||
/// If not provided by the application the default data protection provider depends on the host server.
|
||||
/// The SystemWeb host on IIS will use ASP.NET machine key data protection, and HttpListener and other self-hosted
|
||||
/// servers will use DPAPI data protection.
|
||||
/// </summary>
|
||||
public ISecureDataFormat<AuthenticationTicket> RefreshTokenFormat { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The period of time the authorization code remains valid after being issued. The default is five minutes.
|
||||
/// This time span must also take into account clock synchronization between servers in a web farm, so a very
|
||||
/// brief value could result in unexpectedly expired tokens.
|
||||
/// </summary>
|
||||
public TimeSpan AuthorizationCodeExpireTimeSpan { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The period of time the access token remains valid after being issued. The default is twenty minutes.
|
||||
/// The client application is expected to refresh or acquire a new access token after the token has expired.
|
||||
/// </summary>
|
||||
public TimeSpan AccessTokenExpireTimeSpan { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Produces a single-use authorization code to return to the client application. For the OAuth server to be secure the
|
||||
/// application MUST provide an instance for AuthorizationCodeProvider where the token produced by the OnCreate or OnCreateAsync event
|
||||
/// is considered valid for only one call to OnReceive or OnReceiveAsync.
|
||||
/// </summary>
|
||||
public IAuthenticationTokenProvider AuthorizationCodeProvider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Produces a bearer token the client application will typically be providing to resource server as the authorization bearer
|
||||
/// http request header. If not provided the token produced on the server's default data protection. If a different access token
|
||||
/// provider or format is assigned, a compatible instance must be assigned to the OAuthBearerAuthenticationOptions.AccessTokenProvider
|
||||
/// or OAuthBearerAuthenticationOptions.AccessTokenFormat property of the resource server.
|
||||
/// </summary>
|
||||
public IAuthenticationTokenProvider AccessTokenProvider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Produces a refresh token which may be used to produce a new access token when needed. If not provided the authorization server will
|
||||
/// not return refresh tokens from the /Token endpoint.
|
||||
/// </summary>
|
||||
public IAuthenticationTokenProvider RefreshTokenProvider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Set to true if the web application is able to render error messages on the /Authorize endpoint. This is only needed for cases where
|
||||
/// the browser is not redirected back to the client application, for example, when the client_id or redirect_uri are incorrect. The
|
||||
/// /Authorize endpoint should expect to see "oauth.Error", "oauth.ErrorDescription", "oauth.ErrorUri" properties added to the owin environment.
|
||||
/// </summary>
|
||||
public bool ApplicationCanDisplayErrors { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Used to know what the current clock time is when calculating or validating token expiration. When not assigned default is based on
|
||||
/// DateTimeOffset.UtcNow. This is typically needed only for unit testing.
|
||||
/// </summary>
|
||||
public ISystemClock SystemClock { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// True to allow authorize and token requests to arrive on http URI addresses, and to allow incoming
|
||||
/// redirect_uri authorize request parameter to have http URI addresses.
|
||||
/// </summary>
|
||||
public bool AllowInsecureHttp { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Endpoint responsible for Form Post Response Mode
|
||||
/// See also, http://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html
|
||||
/// </summary>
|
||||
public PathString FormPostEndpoint { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,63 +1,70 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
internal static class Constants
|
||||
{
|
||||
public static class Parameters
|
||||
{
|
||||
public const string ResponseType = "response_type";
|
||||
public const string GrantType = "grant_type";
|
||||
public const string ClientId = "client_id";
|
||||
public const string ClientSecret = "client_secret";
|
||||
public const string RedirectUri = "redirect_uri";
|
||||
public const string Scope = "scope";
|
||||
public const string State = "state";
|
||||
public const string Code = "code";
|
||||
public const string RefreshToken = "refresh_token";
|
||||
public const string Username = "username";
|
||||
public const string Password = "password";
|
||||
public const string Error = "error";
|
||||
public const string ErrorDescription = "error_description";
|
||||
public const string ErrorUri = "error_uri";
|
||||
public const string ExpiresIn = "expires_in";
|
||||
public const string AccessToken = "access_token";
|
||||
public const string TokenType = "token_type";
|
||||
}
|
||||
|
||||
public static class ResponseTypes
|
||||
{
|
||||
public const string Code = "code";
|
||||
public const string Token = "token";
|
||||
}
|
||||
|
||||
public static class GrantTypes
|
||||
{
|
||||
public const string AuthorizationCode = "authorization_code";
|
||||
public const string ClientCredentials = "client_credentials";
|
||||
public const string RefreshToken = "refresh_token";
|
||||
public const string Password = "password";
|
||||
}
|
||||
|
||||
public static class TokenTypes
|
||||
{
|
||||
public const string Bearer = "bearer";
|
||||
}
|
||||
|
||||
public static class Errors
|
||||
{
|
||||
public const string InvalidRequest = "invalid_request";
|
||||
public const string InvalidClient = "invalid_client";
|
||||
public const string InvalidGrant = "invalid_grant";
|
||||
public const string UnsupportedResponseType = "unsupported_response_type";
|
||||
public const string UnsupportedGrantType = "unsupported_grant_type";
|
||||
public const string UnauthorizedClient = "unauthorized_client";
|
||||
}
|
||||
|
||||
public static class Extra
|
||||
{
|
||||
public const string ClientId = "client_id";
|
||||
public const string RedirectUri = "redirect_uri";
|
||||
}
|
||||
}
|
||||
}
|
||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
internal static class Constants
|
||||
{
|
||||
public static class Parameters
|
||||
{
|
||||
public const string ResponseType = "response_type";
|
||||
public const string GrantType = "grant_type";
|
||||
public const string ClientId = "client_id";
|
||||
public const string ClientSecret = "client_secret";
|
||||
public const string RedirectUri = "redirect_uri";
|
||||
public const string Scope = "scope";
|
||||
public const string State = "state";
|
||||
public const string Code = "code";
|
||||
public const string RefreshToken = "refresh_token";
|
||||
public const string Username = "username";
|
||||
public const string Password = "password";
|
||||
public const string Error = "error";
|
||||
public const string ErrorDescription = "error_description";
|
||||
public const string ErrorUri = "error_uri";
|
||||
public const string ExpiresIn = "expires_in";
|
||||
public const string AccessToken = "access_token";
|
||||
public const string TokenType = "token_type";
|
||||
|
||||
public const string ResponseMode = "response_mode";
|
||||
}
|
||||
|
||||
public static class ResponseTypes
|
||||
{
|
||||
public const string Code = "code";
|
||||
public const string Token = "token";
|
||||
}
|
||||
|
||||
public static class GrantTypes
|
||||
{
|
||||
public const string AuthorizationCode = "authorization_code";
|
||||
public const string ClientCredentials = "client_credentials";
|
||||
public const string RefreshToken = "refresh_token";
|
||||
public const string Password = "password";
|
||||
}
|
||||
|
||||
public static class TokenTypes
|
||||
{
|
||||
public const string Bearer = "bearer";
|
||||
}
|
||||
|
||||
public static class Errors
|
||||
{
|
||||
public const string InvalidRequest = "invalid_request";
|
||||
public const string InvalidClient = "invalid_client";
|
||||
public const string InvalidGrant = "invalid_grant";
|
||||
public const string UnsupportedResponseType = "unsupported_response_type";
|
||||
public const string UnsupportedGrantType = "unsupported_grant_type";
|
||||
public const string UnauthorizedClient = "unauthorized_client";
|
||||
}
|
||||
|
||||
public static class Extra
|
||||
{
|
||||
public const string ClientId = "client_id";
|
||||
public const string RedirectUri = "redirect_uri";
|
||||
}
|
||||
|
||||
public static class ResponseModes
|
||||
{
|
||||
public const string FormPost = "form_post";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,154 +1,172 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
/// <summary>
|
||||
/// Interface for OAuthAuthorizationServerOptions.Provider property used by Authorization
|
||||
/// Server to communicate with the web application while processing requests.
|
||||
/// </summary>
|
||||
public interface IOAuthAuthorizationServerProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Called to determine if an incoming request is treated as an Authorize or Token
|
||||
/// endpoint. If Options.AuthorizeEndpointPath or Options.TokenEndpointPath
|
||||
/// are assigned values, then handling this event is optional and context.IsAuthorizeEndpoint and context.IsTokenEndpoint
|
||||
/// will already be true if the request path matches.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task MatchEndpoint(OAuthMatchEndpointContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the context.ClientId is a registered "client_id", and that the context.RedirectUri a "redirect_uri"
|
||||
/// registered for that client. This only occurs when processing the Authorize endpoint. The application MUST implement this
|
||||
/// call, and it MUST validate both of those factors before calling context.Validated. If the context.Validated method is called
|
||||
/// with a given redirectUri parameter, then IsValidated will only become true if the incoming redirect URI matches the given redirect URI.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the origin of the request is a registered "client_id", and that the correct credentials for that client are
|
||||
/// present on the request. If the web application accepts Basic authentication credentials,
|
||||
/// context.TryGetBasicCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request header. If the web
|
||||
/// application accepts "client_id" and "client_secret" as form encoded POST parameters,
|
||||
/// context.TryGetFormCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request body.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client redirect URI, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task ValidateAuthorizeRequest(OAuthValidateAuthorizeRequestContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client credentials, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task ValidateTokenRequest(OAuthValidateTokenRequestContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "authorization_code". This occurs after the Authorize
|
||||
/// endpoint as redirected the user-agent back to the client with a "code" parameter, and the client is exchanging that for an "access_token".
|
||||
/// The claims and properties
|
||||
/// associated with the authorization code are present in the context.Ticket. The application must call context.Validated to instruct the Authorization
|
||||
/// Server middleware to issue an access token based on those claims and properties. The call to context.Validated may be given a different
|
||||
/// AuthenticationTicket or ClaimsIdentity in order to control which information flows from authorization code to access token.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the authorization code to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.1.3
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task GrantAuthorizationCode(OAuthGrantAuthorizationCodeContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "refresh_token". This occurs if your application has issued a "refresh_token"
|
||||
/// along with the "access_token", and the client is attempting to use the "refresh_token" to acquire a new "access_token", and possibly a new "refresh_token".
|
||||
/// To issue a refresh token the an Options.RefreshTokenProvider must be assigned to create the value which is returned. The claims and properties
|
||||
/// associated with the refresh token are present in the context.Ticket. The application must call context.Validated to instruct the
|
||||
/// Authorization Server middleware to issue an access token based on those claims and properties. The call to context.Validated may
|
||||
/// be given a different AuthenticationTicket or ClaimsIdentity in order to control which information flows from the refresh token to
|
||||
/// the access token. The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the refresh token to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-6
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task GrantRefreshToken(OAuthGrantRefreshTokenContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "password". This occurs when the user has provided name and password
|
||||
/// credentials directly into the client application's user interface, and the client application is using those to acquire an "access_token" and
|
||||
/// optional "refresh_token". If the web application supports the
|
||||
/// resource owner credentials grant type it must validate the context.Username and context.Password as appropriate. To issue an
|
||||
/// access token the context.Validated must be called with a new ticket containing the claims about the resource owner which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers. .
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.3.2
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "client_credentials". This occurs when a registered client
|
||||
/// application wishes to acquire an "access_token" to interact with protected resources on it's own behalf, rather than on behalf of an authenticated user.
|
||||
/// If the web application supports the client credentials it may assume the context.ClientId has been validated by the ValidateClientAuthentication call.
|
||||
/// To issue an access token the context.Validated must be called with a new ticket containing the claims about the client application which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers.
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.4.2
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task GrantClientCredentials(OAuthGrantClientCredentialsContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token andpoint arrives with a "grant_type" of any other value. If the application supports custom grant types
|
||||
/// it is entirely responsible for determining if the request should result in an access_token. If context.Validated is called with ticket
|
||||
/// information the response body is produced in the same way as the other standard grant types. If additional response parameters must be
|
||||
/// included they may be added in the final TokenEndpoint call.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.5
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task GrantCustomExtension(OAuthGrantCustomExtensionContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of an incoming Authorize endpoint request before the execution continues on to the web application component
|
||||
/// responsible for producing the html response. Anything present in the OWIN pipeline following the Authorization Server may produce the
|
||||
/// response for the Authorize page. If running on IIS any ASP.NET technology running on the server may produce the response for the
|
||||
/// Authorize page. If the web application wishes to produce the response directly in the AuthorizeEndpoint call it may write to the
|
||||
/// context.Response directly and should call context.RequestCompleted to stop other handlers from executing. If the web application wishes
|
||||
/// to grant the authorization directly in the AuthorizeEndpoint call it cay call context.OwinContext.Authentication.SignIn with the
|
||||
/// appropriate ClaimsIdentity and should call context.RequestCompleted to stop other handlers from executing.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task AuthorizeEndpoint(OAuthAuthorizeEndpointContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of a successful Token endpoint request. An application may implement this call in order to do any final
|
||||
/// modification of the claims being used to issue access or refresh tokens. This call may also be used in order to add additional
|
||||
/// response parameters to the Token endpoint's json response body.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task TokenEndpoint(OAuthTokenEndpointContext context);
|
||||
}
|
||||
}
|
||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
/// <summary>
|
||||
/// Interface for OAuthAuthorizationServerOptions.Provider property used by Authorization
|
||||
/// Server to communicate with the web application while processing requests.
|
||||
/// </summary>
|
||||
public interface IOAuthAuthorizationServerProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Called to determine if an incoming request is treated as an Authorize or Token
|
||||
/// endpoint. If Options.AuthorizeEndpointPath or Options.TokenEndpointPath
|
||||
/// are assigned values, then handling this event is optional and context.IsAuthorizeEndpoint and context.IsTokenEndpoint
|
||||
/// will already be true if the request path matches.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task MatchEndpoint(OAuthMatchEndpointContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the context.ClientId is a registered "client_id", and that the context.RedirectUri a "redirect_uri"
|
||||
/// registered for that client. This only occurs when processing the Authorize endpoint. The application MUST implement this
|
||||
/// call, and it MUST validate both of those factors before calling context.Validated. If the context.Validated method is called
|
||||
/// with a given redirectUri parameter, then IsValidated will only become true if the incoming redirect URI matches the given redirect URI.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the origin of the request is a registered "client_id", and that the correct credentials for that client are
|
||||
/// present on the request. If the web application accepts Basic authentication credentials,
|
||||
/// context.TryGetBasicCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request header. If the web
|
||||
/// application accepts "client_id" and "client_secret" as form encoded POST parameters,
|
||||
/// context.TryGetFormCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request body.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client redirect URI, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task ValidateAuthorizeRequest(OAuthValidateAuthorizeRequestContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client credentials, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task ValidateTokenRequest(OAuthValidateTokenRequestContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "authorization_code". This occurs after the Authorize
|
||||
/// endpoint as redirected the user-agent back to the client with a "code" parameter, and the client is exchanging that for an "access_token".
|
||||
/// The claims and properties
|
||||
/// associated with the authorization code are present in the context.Ticket. The application must call context.Validated to instruct the Authorization
|
||||
/// Server middleware to issue an access token based on those claims and properties. The call to context.Validated may be given a different
|
||||
/// AuthenticationTicket or ClaimsIdentity in order to control which information flows from authorization code to access token.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the authorization code to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.1.3
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task GrantAuthorizationCode(OAuthGrantAuthorizationCodeContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "refresh_token". This occurs if your application has issued a "refresh_token"
|
||||
/// along with the "access_token", and the client is attempting to use the "refresh_token" to acquire a new "access_token", and possibly a new "refresh_token".
|
||||
/// To issue a refresh token the an Options.RefreshTokenProvider must be assigned to create the value which is returned. The claims and properties
|
||||
/// associated with the refresh token are present in the context.Ticket. The application must call context.Validated to instruct the
|
||||
/// Authorization Server middleware to issue an access token based on those claims and properties. The call to context.Validated may
|
||||
/// be given a different AuthenticationTicket or ClaimsIdentity in order to control which information flows from the refresh token to
|
||||
/// the access token. The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the refresh token to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-6
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task GrantRefreshToken(OAuthGrantRefreshTokenContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "password". This occurs when the user has provided name and password
|
||||
/// credentials directly into the client application's user interface, and the client application is using those to acquire an "access_token" and
|
||||
/// optional "refresh_token". If the web application supports the
|
||||
/// resource owner credentials grant type it must validate the context.Username and context.Password as appropriate. To issue an
|
||||
/// access token the context.Validated must be called with a new ticket containing the claims about the resource owner which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers. .
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.3.2
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "client_credentials". This occurs when a registered client
|
||||
/// application wishes to acquire an "access_token" to interact with protected resources on it's own behalf, rather than on behalf of an authenticated user.
|
||||
/// If the web application supports the client credentials it may assume the context.ClientId has been validated by the ValidateClientAuthentication call.
|
||||
/// To issue an access token the context.Validated must be called with a new ticket containing the claims about the client application which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers.
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.4.2
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task GrantClientCredentials(OAuthGrantClientCredentialsContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token andpoint arrives with a "grant_type" of any other value. If the application supports custom grant types
|
||||
/// it is entirely responsible for determining if the request should result in an access_token. If context.Validated is called with ticket
|
||||
/// information the response body is produced in the same way as the other standard grant types. If additional response parameters must be
|
||||
/// included they may be added in the final TokenEndpoint call.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.5
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task GrantCustomExtension(OAuthGrantCustomExtensionContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of an incoming Authorize endpoint request before the execution continues on to the web application component
|
||||
/// responsible for producing the html response. Anything present in the OWIN pipeline following the Authorization Server may produce the
|
||||
/// response for the Authorize page. If running on IIS any ASP.NET technology running on the server may produce the response for the
|
||||
/// Authorize page. If the web application wishes to produce the response directly in the AuthorizeEndpoint call it may write to the
|
||||
/// context.Response directly and should call context.RequestCompleted to stop other handlers from executing. If the web application wishes
|
||||
/// to grant the authorization directly in the AuthorizeEndpoint call it cay call context.OwinContext.Authentication.SignIn with the
|
||||
/// appropriate ClaimsIdentity and should call context.RequestCompleted to stop other handlers from executing.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task AuthorizeEndpoint(OAuthAuthorizeEndpointContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of a successful Token endpoint request. An application may implement this call in order to do any final
|
||||
/// modification of the claims being used to issue access or refresh tokens. This call may also be used in order to add additional
|
||||
/// response parameters to the Token endpoint's json response body.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task TokenEndpoint(OAuthTokenEndpointContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called before the AuthorizationEndpoint redirects its response to the caller. The response could be the
|
||||
/// token, when using implicit flow or the AuthorizationEndpoint when using authorization code flow.
|
||||
/// An application may implement this call in order to do any final modification of the claims being used
|
||||
/// to issue access or refresh tokens. This call may also be used in order to add additional
|
||||
/// response parameters to the authorization endpoint's response.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
Task AuthorizationEndpointResponse(OAuthAuthorizationEndpointResponseContext context);
|
||||
|
||||
/// <summary>
|
||||
/// Called before the TokenEndpoint redirects its response to the caller.
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <returns></returns>
|
||||
Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,332 +1,378 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
/// <summary>
|
||||
/// Default implementation of IOAuthAuthorizationServerProvider used by Authorization
|
||||
/// Server to communicate with the web application while processing requests. OAuthAuthorizationServerProvider provides some default behavior,
|
||||
/// may be used as a virtual base class, and offers delegate properties which may be used to
|
||||
/// handle individual calls without declaring a new class type.
|
||||
/// </summary>
|
||||
public class OAuthAuthorizationServerProvider : IOAuthAuthorizationServerProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates new instance of default provider behavior
|
||||
/// </summary>
|
||||
public OAuthAuthorizationServerProvider()
|
||||
{
|
||||
OnMatchEndpoint = context => Task.FromResult<object>(null);
|
||||
OnValidateClientRedirectUri = context => Task.FromResult<object>(null);
|
||||
OnValidateClientAuthentication = context => Task.FromResult<object>(null);
|
||||
|
||||
OnValidateAuthorizeRequest = DefaultBehavior.ValidateAuthorizeRequest;
|
||||
OnValidateTokenRequest = DefaultBehavior.ValidateTokenRequest;
|
||||
|
||||
OnGrantAuthorizationCode = DefaultBehavior.GrantAuthorizationCode;
|
||||
OnGrantResourceOwnerCredentials = context => Task.FromResult<object>(null);
|
||||
OnGrantRefreshToken = DefaultBehavior.GrantRefreshToken;
|
||||
OnGrantClientCredentials = context => Task.FromResult<object>(null);
|
||||
OnGrantCustomExtension = context => Task.FromResult<object>(null);
|
||||
|
||||
OnAuthorizeEndpoint = context => Task.FromResult<object>(null);
|
||||
OnTokenEndpoint = context => Task.FromResult<object>(null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to determine if an incoming request is treated as an Authorize or Token
|
||||
/// endpoint. If Options.AuthorizeEndpointPath or Options.TokenEndpointPath
|
||||
/// are assigned values, then handling this event is optional and context.IsAuthorizeEndpoint and context.IsTokenEndpoint
|
||||
/// will already be true if the request path matches.
|
||||
/// </summary>
|
||||
public Func<OAuthMatchEndpointContext, Task> OnMatchEndpoint { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the context.ClientId is a registered "client_id", and that the context.RedirectUri a "redirect_uri"
|
||||
/// registered for that client. This only occurs when processing the Authorize endpoint. The application MUST implement this
|
||||
/// call, and it MUST validate both of those factors before calling context.Validated. If the context.Validated method is called
|
||||
/// with a given redirectUri parameter, then IsValidated will only become true if the incoming redirect URI matches the given redirect URI.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
public Func<OAuthValidateClientRedirectUriContext, Task> OnValidateClientRedirectUri { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the origin of the request is a registered "client_id", and that the correct credentials for that client are
|
||||
/// present on the request. If the web application accepts Basic authentication credentials,
|
||||
/// context.TryGetBasicCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request header. If the web
|
||||
/// application accepts "client_id" and "client_secret" as form encoded POST parameters,
|
||||
/// context.TryGetFormCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request body.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
public Func<OAuthValidateClientAuthenticationContext, Task> OnValidateClientAuthentication { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client redirect URI, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
public Func<OAuthValidateAuthorizeRequestContext, Task> OnValidateAuthorizeRequest { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client credentials, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
public Func<OAuthValidateTokenRequestContext, Task> OnValidateTokenRequest { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "authorization_code". This occurs after the Authorize
|
||||
/// endpoint as redirected the user-agent back to the client with a "code" parameter, and the client is exchanging that for an "access_token".
|
||||
/// The claims and properties
|
||||
/// associated with the authorization code are present in the context.Ticket. The application must call context.Validated to instruct the Authorization
|
||||
/// Server middleware to issue an access token based on those claims and properties. The call to context.Validated may be given a different
|
||||
/// AuthenticationTicket or ClaimsIdentity in order to control which information flows from authorization code to access token.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the authorization code to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.1.3
|
||||
/// </summary>
|
||||
public Func<OAuthGrantAuthorizationCodeContext, Task> OnGrantAuthorizationCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "password". This occurs when the user has provided name and password
|
||||
/// credentials directly into the client application's user interface, and the client application is using those to acquire an "access_token" and
|
||||
/// optional "refresh_token". If the web application supports the
|
||||
/// resource owner credentials grant type it must validate the context.Username and context.Password as appropriate. To issue an
|
||||
/// access token the context.Validated must be called with a new ticket containing the claims about the resource owner which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers.
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.3.2
|
||||
/// </summary>
|
||||
public Func<OAuthGrantResourceOwnerCredentialsContext, Task> OnGrantResourceOwnerCredentials { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "client_credentials". This occurs when a registered client
|
||||
/// application wishes to acquire an "access_token" to interact with protected resources on it's own behalf, rather than on behalf of an authenticated user.
|
||||
/// If the web application supports the client credentials it may assume the context.ClientId has been validated by the ValidateClientAuthentication call.
|
||||
/// To issue an access token the context.Validated must be called with a new ticket containing the claims about the client application which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers.
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.4.2
|
||||
/// </summary>
|
||||
public Func<OAuthGrantClientCredentialsContext, Task> OnGrantClientCredentials { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "refresh_token". This occurs if your application has issued a "refresh_token"
|
||||
/// along with the "access_token", and the client is attempting to use the "refresh_token" to acquire a new "access_token", and possibly a new "refresh_token".
|
||||
/// To issue a refresh token the an Options.RefreshTokenProvider must be assigned to create the value which is returned. The claims and properties
|
||||
/// associated with the refresh token are present in the context.Ticket. The application must call context.Validated to instruct the
|
||||
/// Authorization Server middleware to issue an access token based on those claims and properties. The call to context.Validated may
|
||||
/// be given a different AuthenticationTicket or ClaimsIdentity in order to control which information flows from the refresh token to
|
||||
/// the access token. The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the refresh token to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-6
|
||||
/// </summary>
|
||||
public Func<OAuthGrantRefreshTokenContext, Task> OnGrantRefreshToken { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token andpoint arrives with a "grant_type" of any other value. If the application supports custom grant types
|
||||
/// it is entirely responsible for determining if the request should result in an access_token. If context.Validated is called with ticket
|
||||
/// information the response body is produced in the same way as the other standard grant types. If additional response parameters must be
|
||||
/// included they may be added in the final TokenEndpoint call.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.5
|
||||
/// </summary>
|
||||
public Func<OAuthGrantCustomExtensionContext, Task> OnGrantCustomExtension { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of an incoming Authorize endpoint request before the execution continues on to the web application component
|
||||
/// responsible for producing the html response. Anything present in the OWIN pipeline following the Authorization Server may produce the
|
||||
/// response for the Authorize page. If running on IIS any ASP.NET technology running on the server may produce the response for the
|
||||
/// Authorize page. If the web application wishes to produce the response directly in the AuthorizeEndpoint call it may write to the
|
||||
/// context.Response directly and should call context.RequestCompleted to stop other handlers from executing. If the web application wishes
|
||||
/// to grant the authorization directly in the AuthorizeEndpoint call it cay call context.OwinContext.Authentication.SignIn with the
|
||||
/// appropriate ClaimsIdentity and should call context.RequestCompleted to stop other handlers from executing.
|
||||
/// </summary>
|
||||
public Func<OAuthAuthorizeEndpointContext, Task> OnAuthorizeEndpoint { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of a successful Token endpoint request. An application may implement this call in order to do any final
|
||||
/// modification of the claims being used to issue access or refresh tokens. This call may also be used in order to add additional
|
||||
/// response parameters to the Token endpoint's json response body.
|
||||
/// </summary>
|
||||
public Func<OAuthTokenEndpointContext, Task> OnTokenEndpoint { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called to determine if an incoming request is treated as an Authorize or Token
|
||||
/// endpoint. If Options.AuthorizeEndpointPath or Options.TokenEndpointPath
|
||||
/// are assigned values, then handling this event is optional and context.IsAuthorizeEndpoint and context.IsTokenEndpoint
|
||||
/// will already be true if the request path matches.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task MatchEndpoint(OAuthMatchEndpointContext context)
|
||||
{
|
||||
return OnMatchEndpoint.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the context.ClientId is a registered "client_id", and that the context.RedirectUri a "redirect_uri"
|
||||
/// registered for that client. This only occurs when processing the Authorize endpoint. The application MUST implement this
|
||||
/// call, and it MUST validate both of those factors before calling context.Validated. If the context.Validated method is called
|
||||
/// with a given redirectUri parameter, then IsValidated will only become true if the incoming redirect URI matches the given redirect URI.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
|
||||
{
|
||||
return OnValidateClientRedirectUri.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the origin of the request is a registered "client_id", and that the correct credentials for that client are
|
||||
/// present on the request. If the web application accepts Basic authentication credentials,
|
||||
/// context.TryGetBasicCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request header. If the web
|
||||
/// application accepts "client_id" and "client_secret" as form encoded POST parameters,
|
||||
/// context.TryGetFormCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request body.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
|
||||
{
|
||||
return OnValidateClientAuthentication.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client redirect URI, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task ValidateAuthorizeRequest(OAuthValidateAuthorizeRequestContext context)
|
||||
{
|
||||
return OnValidateAuthorizeRequest.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client credentials, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task ValidateTokenRequest(OAuthValidateTokenRequestContext context)
|
||||
{
|
||||
return OnValidateTokenRequest.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "authorization_code". This occurs after the Authorize
|
||||
/// endpoint as redirected the user-agent back to the client with a "code" parameter, and the client is exchanging that for an "access_token".
|
||||
/// The claims and properties
|
||||
/// associated with the authorization code are present in the context.Ticket. The application must call context.Validated to instruct the Authorization
|
||||
/// Server middleware to issue an access token based on those claims and properties. The call to context.Validated may be given a different
|
||||
/// AuthenticationTicket or ClaimsIdentity in order to control which information flows from authorization code to access token.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the authorization code to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.1.3
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task GrantAuthorizationCode(OAuthGrantAuthorizationCodeContext context)
|
||||
{
|
||||
return OnGrantAuthorizationCode.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "refresh_token". This occurs if your application has issued a "refresh_token"
|
||||
/// along with the "access_token", and the client is attempting to use the "refresh_token" to acquire a new "access_token", and possibly a new "refresh_token".
|
||||
/// To issue a refresh token the an Options.RefreshTokenProvider must be assigned to create the value which is returned. The claims and properties
|
||||
/// associated with the refresh token are present in the context.Ticket. The application must call context.Validated to instruct the
|
||||
/// Authorization Server middleware to issue an access token based on those claims and properties. The call to context.Validated may
|
||||
/// be given a different AuthenticationTicket or ClaimsIdentity in order to control which information flows from the refresh token to
|
||||
/// the access token. The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the refresh token to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-6
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task GrantRefreshToken(OAuthGrantRefreshTokenContext context)
|
||||
{
|
||||
return OnGrantRefreshToken.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "password". This occurs when the user has provided name and password
|
||||
/// credentials directly into the client application's user interface, and the client application is using those to acquire an "access_token" and
|
||||
/// optional "refresh_token". If the web application supports the
|
||||
/// resource owner credentials grant type it must validate the context.Username and context.Password as appropriate. To issue an
|
||||
/// access token the context.Validated must be called with a new ticket containing the claims about the resource owner which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers.
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.3.2
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
|
||||
{
|
||||
return OnGrantResourceOwnerCredentials.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "client_credentials". This occurs when a registered client
|
||||
/// application wishes to acquire an "access_token" to interact with protected resources on it's own behalf, rather than on behalf of an authenticated user.
|
||||
/// If the web application supports the client credentials it may assume the context.ClientId has been validated by the ValidateClientAuthentication call.
|
||||
/// To issue an access token the context.Validated must be called with a new ticket containing the claims about the client application which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers.
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.4.2
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task GrantClientCredentials(OAuthGrantClientCredentialsContext context)
|
||||
{
|
||||
return OnGrantClientCredentials.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token andpoint arrives with a "grant_type" of any other value. If the application supports custom grant types
|
||||
/// it is entirely responsible for determining if the request should result in an access_token. If context.Validated is called with ticket
|
||||
/// information the response body is produced in the same way as the other standard grant types. If additional response parameters must be
|
||||
/// included they may be added in the final TokenEndpoint call.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.5
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task GrantCustomExtension(OAuthGrantCustomExtensionContext context)
|
||||
{
|
||||
return OnGrantCustomExtension.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of an incoming Authorize endpoint request before the execution continues on to the web application component
|
||||
/// responsible for producing the html response. Anything present in the OWIN pipeline following the Authorization Server may produce the
|
||||
/// response for the Authorize page. If running on IIS any ASP.NET technology running on the server may produce the response for the
|
||||
/// Authorize page. If the web application wishes to produce the response directly in the AuthorizeEndpoint call it may write to the
|
||||
/// context.Response directly and should call context.RequestCompleted to stop other handlers from executing. If the web application wishes
|
||||
/// to grant the authorization directly in the AuthorizeEndpoint call it cay call context.OwinContext.Authentication.SignIn with the
|
||||
/// appropriate ClaimsIdentity and should call context.RequestCompleted to stop other handlers from executing.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task AuthorizeEndpoint(OAuthAuthorizeEndpointContext context)
|
||||
{
|
||||
return OnAuthorizeEndpoint.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of a successful Token endpoint request. An application may implement this call in order to do any final
|
||||
/// modification of the claims being used to issue access or refresh tokens. This call may also be used in order to add additional
|
||||
/// response parameters to the Token endpoint's json response body.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task TokenEndpoint(OAuthTokenEndpointContext context)
|
||||
{
|
||||
return OnTokenEndpoint.Invoke(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
/// <summary>
|
||||
/// Default implementation of IOAuthAuthorizationServerProvider used by Authorization
|
||||
/// Server to communicate with the web application while processing requests. OAuthAuthorizationServerProvider provides some default behavior,
|
||||
/// may be used as a virtual base class, and offers delegate properties which may be used to
|
||||
/// handle individual calls without declaring a new class type.
|
||||
/// </summary>
|
||||
public class OAuthAuthorizationServerProvider : IOAuthAuthorizationServerProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates new instance of default provider behavior
|
||||
/// </summary>
|
||||
public OAuthAuthorizationServerProvider()
|
||||
{
|
||||
OnMatchEndpoint = context => Task.FromResult<object>(null);
|
||||
OnValidateClientRedirectUri = context => Task.FromResult<object>(null);
|
||||
OnValidateClientAuthentication = context => Task.FromResult<object>(null);
|
||||
|
||||
OnValidateAuthorizeRequest = DefaultBehavior.ValidateAuthorizeRequest;
|
||||
OnValidateTokenRequest = DefaultBehavior.ValidateTokenRequest;
|
||||
|
||||
OnGrantAuthorizationCode = DefaultBehavior.GrantAuthorizationCode;
|
||||
OnGrantResourceOwnerCredentials = context => Task.FromResult<object>(null);
|
||||
OnGrantRefreshToken = DefaultBehavior.GrantRefreshToken;
|
||||
OnGrantClientCredentials = context => Task.FromResult<object>(null);
|
||||
OnGrantCustomExtension = context => Task.FromResult<object>(null);
|
||||
|
||||
OnAuthorizeEndpoint = context => Task.FromResult<object>(null);
|
||||
OnTokenEndpoint = context => Task.FromResult<object>(null);
|
||||
|
||||
OnAuthorizationEndpointResponse = context => Task.FromResult<object>(null);
|
||||
|
||||
OnTokenEndpointResponse = context => Task.FromResult<object>(null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to determine if an incoming request is treated as an Authorize or Token
|
||||
/// endpoint. If Options.AuthorizeEndpointPath or Options.TokenEndpointPath
|
||||
/// are assigned values, then handling this event is optional and context.IsAuthorizeEndpoint and context.IsTokenEndpoint
|
||||
/// will already be true if the request path matches.
|
||||
/// </summary>
|
||||
public Func<OAuthMatchEndpointContext, Task> OnMatchEndpoint { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the context.ClientId is a registered "client_id", and that the context.RedirectUri a "redirect_uri"
|
||||
/// registered for that client. This only occurs when processing the Authorize endpoint. The application MUST implement this
|
||||
/// call, and it MUST validate both of those factors before calling context.Validated. If the context.Validated method is called
|
||||
/// with a given redirectUri parameter, then IsValidated will only become true if the incoming redirect URI matches the given redirect URI.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
public Func<OAuthValidateClientRedirectUriContext, Task> OnValidateClientRedirectUri { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the origin of the request is a registered "client_id", and that the correct credentials for that client are
|
||||
/// present on the request. If the web application accepts Basic authentication credentials,
|
||||
/// context.TryGetBasicCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request header. If the web
|
||||
/// application accepts "client_id" and "client_secret" as form encoded POST parameters,
|
||||
/// context.TryGetFormCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request body.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
public Func<OAuthValidateClientAuthenticationContext, Task> OnValidateClientAuthentication { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client redirect URI, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
public Func<OAuthValidateAuthorizeRequestContext, Task> OnValidateAuthorizeRequest { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client credentials, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
public Func<OAuthValidateTokenRequestContext, Task> OnValidateTokenRequest { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "authorization_code". This occurs after the Authorize
|
||||
/// endpoint as redirected the user-agent back to the client with a "code" parameter, and the client is exchanging that for an "access_token".
|
||||
/// The claims and properties
|
||||
/// associated with the authorization code are present in the context.Ticket. The application must call context.Validated to instruct the Authorization
|
||||
/// Server middleware to issue an access token based on those claims and properties. The call to context.Validated may be given a different
|
||||
/// AuthenticationTicket or ClaimsIdentity in order to control which information flows from authorization code to access token.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the authorization code to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.1.3
|
||||
/// </summary>
|
||||
public Func<OAuthGrantAuthorizationCodeContext, Task> OnGrantAuthorizationCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "password". This occurs when the user has provided name and password
|
||||
/// credentials directly into the client application's user interface, and the client application is using those to acquire an "access_token" and
|
||||
/// optional "refresh_token". If the web application supports the
|
||||
/// resource owner credentials grant type it must validate the context.Username and context.Password as appropriate. To issue an
|
||||
/// access token the context.Validated must be called with a new ticket containing the claims about the resource owner which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers.
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.3.2
|
||||
/// </summary>
|
||||
public Func<OAuthGrantResourceOwnerCredentialsContext, Task> OnGrantResourceOwnerCredentials { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "client_credentials". This occurs when a registered client
|
||||
/// application wishes to acquire an "access_token" to interact with protected resources on it's own behalf, rather than on behalf of an authenticated user.
|
||||
/// If the web application supports the client credentials it may assume the context.ClientId has been validated by the ValidateClientAuthentication call.
|
||||
/// To issue an access token the context.Validated must be called with a new ticket containing the claims about the client application which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers.
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.4.2
|
||||
/// </summary>
|
||||
public Func<OAuthGrantClientCredentialsContext, Task> OnGrantClientCredentials { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "refresh_token". This occurs if your application has issued a "refresh_token"
|
||||
/// along with the "access_token", and the client is attempting to use the "refresh_token" to acquire a new "access_token", and possibly a new "refresh_token".
|
||||
/// To issue a refresh token the an Options.RefreshTokenProvider must be assigned to create the value which is returned. The claims and properties
|
||||
/// associated with the refresh token are present in the context.Ticket. The application must call context.Validated to instruct the
|
||||
/// Authorization Server middleware to issue an access token based on those claims and properties. The call to context.Validated may
|
||||
/// be given a different AuthenticationTicket or ClaimsIdentity in order to control which information flows from the refresh token to
|
||||
/// the access token. The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the refresh token to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-6
|
||||
/// </summary>
|
||||
public Func<OAuthGrantRefreshTokenContext, Task> OnGrantRefreshToken { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token andpoint arrives with a "grant_type" of any other value. If the application supports custom grant types
|
||||
/// it is entirely responsible for determining if the request should result in an access_token. If context.Validated is called with ticket
|
||||
/// information the response body is produced in the same way as the other standard grant types. If additional response parameters must be
|
||||
/// included they may be added in the final TokenEndpoint call.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.5
|
||||
/// </summary>
|
||||
public Func<OAuthGrantCustomExtensionContext, Task> OnGrantCustomExtension { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of an incoming Authorize endpoint request before the execution continues on to the web application component
|
||||
/// responsible for producing the html response. Anything present in the OWIN pipeline following the Authorization Server may produce the
|
||||
/// response for the Authorize page. If running on IIS any ASP.NET technology running on the server may produce the response for the
|
||||
/// Authorize page. If the web application wishes to produce the response directly in the AuthorizeEndpoint call it may write to the
|
||||
/// context.Response directly and should call context.RequestCompleted to stop other handlers from executing. If the web application wishes
|
||||
/// to grant the authorization directly in the AuthorizeEndpoint call it cay call context.OwinContext.Authentication.SignIn with the
|
||||
/// appropriate ClaimsIdentity and should call context.RequestCompleted to stop other handlers from executing.
|
||||
/// </summary>
|
||||
public Func<OAuthAuthorizeEndpointContext, Task> OnAuthorizeEndpoint { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of a successful Token endpoint request. An application may implement this call in order to do any final
|
||||
/// modification of the claims being used to issue access or refresh tokens. This call may also be used in order to add additional
|
||||
/// response parameters to the Token endpoint's json response body.
|
||||
/// </summary>
|
||||
public Func<OAuthTokenEndpointContext, Task> OnTokenEndpoint { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called before the AuthorizationEndpoint redirects its response to the caller. The response could be the
|
||||
/// token, when using implicit flow or the AuthorizationEndpoint when using authorization code flow.
|
||||
/// An application may implement this call in order to do any final modification of the claims being used
|
||||
/// to issue access or refresh tokens. This call may also be used in order to add additional
|
||||
/// response parameters to the authorization endpoint's response.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public Func<OAuthAuthorizationEndpointResponseContext, Task> OnAuthorizationEndpointResponse { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called before the TokenEndpoint redirects its response to the caller.
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <returns></returns>
|
||||
public Func<OAuthTokenEndpointResponseContext, Task> OnTokenEndpointResponse { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Called to determine if an incoming request is treated as an Authorize or Token
|
||||
/// endpoint. If Options.AuthorizeEndpointPath or Options.TokenEndpointPath
|
||||
/// are assigned values, then handling this event is optional and context.IsAuthorizeEndpoint and context.IsTokenEndpoint
|
||||
/// will already be true if the request path matches.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task MatchEndpoint(OAuthMatchEndpointContext context)
|
||||
{
|
||||
return OnMatchEndpoint.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the context.ClientId is a registered "client_id", and that the context.RedirectUri a "redirect_uri"
|
||||
/// registered for that client. This only occurs when processing the Authorize endpoint. The application MUST implement this
|
||||
/// call, and it MUST validate both of those factors before calling context.Validated. If the context.Validated method is called
|
||||
/// with a given redirectUri parameter, then IsValidated will only become true if the incoming redirect URI matches the given redirect URI.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
|
||||
{
|
||||
return OnValidateClientRedirectUri.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to validate that the origin of the request is a registered "client_id", and that the correct credentials for that client are
|
||||
/// present on the request. If the web application accepts Basic authentication credentials,
|
||||
/// context.TryGetBasicCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request header. If the web
|
||||
/// application accepts "client_id" and "client_secret" as form encoded POST parameters,
|
||||
/// context.TryGetFormCredentials(out clientId, out clientSecret) may be called to acquire those values if present in the request body.
|
||||
/// If context.Validated is not called the request will not proceed further.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
|
||||
{
|
||||
return OnValidateClientAuthentication.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client redirect URI, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task ValidateAuthorizeRequest(OAuthValidateAuthorizeRequestContext context)
|
||||
{
|
||||
return OnValidateAuthorizeRequest.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called for each request to the Authorize endpoint to determine if the request is valid and should continue.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to assume well-formed requests, with
|
||||
/// validated client credentials, should continue processing. An application may add any additional constraints.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task ValidateTokenRequest(OAuthValidateTokenRequestContext context)
|
||||
{
|
||||
return OnValidateTokenRequest.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "authorization_code". This occurs after the Authorize
|
||||
/// endpoint as redirected the user-agent back to the client with a "code" parameter, and the client is exchanging that for an "access_token".
|
||||
/// The claims and properties
|
||||
/// associated with the authorization code are present in the context.Ticket. The application must call context.Validated to instruct the Authorization
|
||||
/// Server middleware to issue an access token based on those claims and properties. The call to context.Validated may be given a different
|
||||
/// AuthenticationTicket or ClaimsIdentity in order to control which information flows from authorization code to access token.
|
||||
/// The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the authorization code to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.1.3
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task GrantAuthorizationCode(OAuthGrantAuthorizationCodeContext context)
|
||||
{
|
||||
return OnGrantAuthorizationCode.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "refresh_token". This occurs if your application has issued a "refresh_token"
|
||||
/// along with the "access_token", and the client is attempting to use the "refresh_token" to acquire a new "access_token", and possibly a new "refresh_token".
|
||||
/// To issue a refresh token the an Options.RefreshTokenProvider must be assigned to create the value which is returned. The claims and properties
|
||||
/// associated with the refresh token are present in the context.Ticket. The application must call context.Validated to instruct the
|
||||
/// Authorization Server middleware to issue an access token based on those claims and properties. The call to context.Validated may
|
||||
/// be given a different AuthenticationTicket or ClaimsIdentity in order to control which information flows from the refresh token to
|
||||
/// the access token. The default behavior when using the OAuthAuthorizationServerProvider is to flow information from the refresh token to
|
||||
/// the access token unmodified.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-6
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task GrantRefreshToken(OAuthGrantRefreshTokenContext context)
|
||||
{
|
||||
return OnGrantRefreshToken.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "password". This occurs when the user has provided name and password
|
||||
/// credentials directly into the client application's user interface, and the client application is using those to acquire an "access_token" and
|
||||
/// optional "refresh_token". If the web application supports the
|
||||
/// resource owner credentials grant type it must validate the context.Username and context.Password as appropriate. To issue an
|
||||
/// access token the context.Validated must be called with a new ticket containing the claims about the resource owner which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers.
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.3.2
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
|
||||
{
|
||||
return OnGrantResourceOwnerCredentials.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token endpoint arrives with a "grant_type" of "client_credentials". This occurs when a registered client
|
||||
/// application wishes to acquire an "access_token" to interact with protected resources on it's own behalf, rather than on behalf of an authenticated user.
|
||||
/// If the web application supports the client credentials it may assume the context.ClientId has been validated by the ValidateClientAuthentication call.
|
||||
/// To issue an access token the context.Validated must be called with a new ticket containing the claims about the client application which should be associated
|
||||
/// with the access token. The application should take appropriate measures to ensure that the endpoint isn’t abused by malicious callers.
|
||||
/// The default behavior is to reject this grant type.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.4.2
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task GrantClientCredentials(OAuthGrantClientCredentialsContext context)
|
||||
{
|
||||
return OnGrantClientCredentials.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when a request to the Token andpoint arrives with a "grant_type" of any other value. If the application supports custom grant types
|
||||
/// it is entirely responsible for determining if the request should result in an access_token. If context.Validated is called with ticket
|
||||
/// information the response body is produced in the same way as the other standard grant types. If additional response parameters must be
|
||||
/// included they may be added in the final TokenEndpoint call.
|
||||
/// See also http://tools.ietf.org/html/rfc6749#section-4.5
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task GrantCustomExtension(OAuthGrantCustomExtensionContext context)
|
||||
{
|
||||
return OnGrantCustomExtension.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of an incoming Authorize endpoint request before the execution continues on to the web application component
|
||||
/// responsible for producing the html response. Anything present in the OWIN pipeline following the Authorization Server may produce the
|
||||
/// response for the Authorize page. If running on IIS any ASP.NET technology running on the server may produce the response for the
|
||||
/// Authorize page. If the web application wishes to produce the response directly in the AuthorizeEndpoint call it may write to the
|
||||
/// context.Response directly and should call context.RequestCompleted to stop other handlers from executing. If the web application wishes
|
||||
/// to grant the authorization directly in the AuthorizeEndpoint call it cay call context.OwinContext.Authentication.SignIn with the
|
||||
/// appropriate ClaimsIdentity and should call context.RequestCompleted to stop other handlers from executing.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task AuthorizeEndpoint(OAuthAuthorizeEndpointContext context)
|
||||
{
|
||||
return OnAuthorizeEndpoint.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called at the final stage of a successful Token endpoint request. An application may implement this call in order to do any final
|
||||
/// modification of the claims being used to issue access or refresh tokens. This call may also be used in order to add additional
|
||||
/// response parameters to the Token endpoint's json response body.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task TokenEndpoint(OAuthTokenEndpointContext context)
|
||||
{
|
||||
return OnTokenEndpoint.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called before the AuthorizationEndpoint redirects its response to the caller. The response could be the
|
||||
/// token, when using implicit flow or the AuthorizationEndpoint when using authorization code flow.
|
||||
/// An application may implement this call in order to do any final modification of the claims being used
|
||||
/// to issue access or refresh tokens. This call may also be used in order to add additional
|
||||
/// response parameters to the authorization endpoint's response.
|
||||
/// </summary>
|
||||
/// <param name="context">The context of the event carries information in and results out.</param>
|
||||
/// <returns>Task to enable asynchronous execution</returns>
|
||||
public virtual Task AuthorizationEndpointResponse(OAuthAuthorizationEndpointResponseContext context)
|
||||
{
|
||||
return OnAuthorizationEndpointResponse.Invoke(context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called before the TokenEndpoint redirects its response to the caller.
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <returns></returns>
|
||||
public virtual Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)
|
||||
{
|
||||
return OnTokenEndpointResponse.Invoke(context); ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.Owin.Security.OAuth.Messages;
|
||||
using Microsoft.Owin.Security.Provider;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides context information when processing an Authorization Response
|
||||
/// </summary>
|
||||
public class OAuthAuthorizationEndpointResponseContext: EndpointContext<OAuthAuthorizationServerOptions>
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="OAuthAuthorizationEndpointResponseContext"/> class
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <param name="ticket"></param>
|
||||
/// <param name="tokenEndpointRequest"></param>
|
||||
public OAuthAuthorizationEndpointResponseContext(
|
||||
IOwinContext context,
|
||||
OAuthAuthorizationServerOptions options,
|
||||
AuthenticationTicket ticket,
|
||||
AuthorizeEndpointRequest authorizeEndpointRequest,
|
||||
string accessToken,
|
||||
string authorizationCode)
|
||||
: base(context, options)
|
||||
{
|
||||
if (ticket == null)
|
||||
{
|
||||
throw new ArgumentNullException("ticket");
|
||||
}
|
||||
|
||||
Identity = ticket.Identity;
|
||||
Properties = ticket.Properties;
|
||||
AuthorizeEndpointRequest = authorizeEndpointRequest;
|
||||
AdditionalResponseParameters = new Dictionary<string, object>(StringComparer.Ordinal);
|
||||
AccessToken = accessToken;
|
||||
AuthorizationCode = authorizationCode;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the identity of the resource owner.
|
||||
/// </summary>
|
||||
public ClaimsIdentity Identity { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dictionary containing the state of the authentication session.
|
||||
/// </summary>
|
||||
public AuthenticationProperties Properties { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets information about the authorize endpoint request.
|
||||
/// </summary>
|
||||
public AuthorizeEndpointRequest AuthorizeEndpointRequest { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Enables additional values to be appended to the token response.
|
||||
/// </summary>
|
||||
public IDictionary<string, object> AdditionalResponseParameters { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The serialized Access-Token. Depending on the flow, it can be null.
|
||||
/// </summary>
|
||||
public string AccessToken { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The created Authorization-Code. Depending on the flow, it can be null.
|
||||
/// </summary>
|
||||
public string AuthorizationCode { get; private set; }
|
||||
|
||||
}
|
||||
}
|
|
@ -1,79 +1,79 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.Owin.Security.OAuth.Messages;
|
||||
using Microsoft.Owin.Security.Provider;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides context information used when processing an OAuth token request.
|
||||
/// </summary>
|
||||
public class OAuthTokenEndpointContext : EndpointContext<OAuthAuthorizationServerOptions>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="OAuthTokenEndpointContext"/> class
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <param name="ticket"></param>
|
||||
/// <param name="tokenEndpointRequest"></param>
|
||||
public OAuthTokenEndpointContext(
|
||||
IOwinContext context,
|
||||
OAuthAuthorizationServerOptions options,
|
||||
AuthenticationTicket ticket,
|
||||
TokenEndpointRequest tokenEndpointRequest)
|
||||
: base(context, options)
|
||||
{
|
||||
if (ticket == null)
|
||||
{
|
||||
throw new ArgumentNullException("ticket");
|
||||
}
|
||||
|
||||
Identity = ticket.Identity;
|
||||
Properties = ticket.Properties;
|
||||
TokenEndpointRequest = tokenEndpointRequest;
|
||||
AdditionalResponseParameters = new Dictionary<string, object>(StringComparer.Ordinal);
|
||||
TokenIssued = Identity != null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the identity of the resource owner.
|
||||
/// </summary>
|
||||
public ClaimsIdentity Identity { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dictionary containing the state of the authentication session.
|
||||
/// </summary>
|
||||
public AuthenticationProperties Properties { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets information about the token endpoint request.
|
||||
/// </summary>
|
||||
public TokenEndpointRequest TokenEndpointRequest { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets whether or not the token should be issued.
|
||||
/// </summary>
|
||||
public bool TokenIssued { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Enables additional values to be appended to the token response.
|
||||
/// </summary>
|
||||
public IDictionary<string, object> AdditionalResponseParameters { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Issues the token.
|
||||
/// </summary>
|
||||
/// <param name="identity"></param>
|
||||
/// <param name="properties"></param>
|
||||
public void Issue(ClaimsIdentity identity, AuthenticationProperties properties)
|
||||
{
|
||||
Identity = identity;
|
||||
Properties = properties;
|
||||
TokenIssued = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.Owin.Security.OAuth.Messages;
|
||||
using Microsoft.Owin.Security.Provider;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides context information used when processing an OAuth token request.
|
||||
/// </summary>
|
||||
public class OAuthTokenEndpointContext : EndpointContext<OAuthAuthorizationServerOptions>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="OAuthTokenEndpointContext"/> class
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <param name="ticket"></param>
|
||||
/// <param name="tokenEndpointRequest"></param>
|
||||
public OAuthTokenEndpointContext(
|
||||
IOwinContext context,
|
||||
OAuthAuthorizationServerOptions options,
|
||||
AuthenticationTicket ticket,
|
||||
TokenEndpointRequest tokenEndpointRequest)
|
||||
: base(context, options)
|
||||
{
|
||||
if (ticket == null)
|
||||
{
|
||||
throw new ArgumentNullException("ticket");
|
||||
}
|
||||
|
||||
Identity = ticket.Identity;
|
||||
Properties = ticket.Properties;
|
||||
TokenEndpointRequest = tokenEndpointRequest;
|
||||
AdditionalResponseParameters = new Dictionary<string, object>(StringComparer.Ordinal);
|
||||
TokenIssued = Identity != null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the identity of the resource owner.
|
||||
/// </summary>
|
||||
public ClaimsIdentity Identity { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dictionary containing the state of the authentication session.
|
||||
/// </summary>
|
||||
public AuthenticationProperties Properties { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets information about the token endpoint request.
|
||||
/// </summary>
|
||||
public TokenEndpointRequest TokenEndpointRequest { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets whether or not the token should be issued.
|
||||
/// </summary>
|
||||
public bool TokenIssued { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Enables additional values to be appended to the token response.
|
||||
/// </summary>
|
||||
public IDictionary<string, object> AdditionalResponseParameters { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Issues the token.
|
||||
/// </summary>
|
||||
/// <param name="identity"></param>
|
||||
/// <param name="properties"></param>
|
||||
public void Issue(ClaimsIdentity identity, AuthenticationProperties properties)
|
||||
{
|
||||
Identity = identity;
|
||||
Properties = properties;
|
||||
TokenIssued = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.Owin.Security.OAuth.Messages;
|
||||
using Microsoft.Owin.Security.Provider;
|
||||
|
||||
namespace Microsoft.Owin.Security.OAuth
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides context information used at the end of a token-endpoint-request.
|
||||
/// </summary>
|
||||
public class OAuthTokenEndpointResponseContext : EndpointContext<OAuthAuthorizationServerOptions>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="OAuthTokenEndpointResponseContext"/> class
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <param name="ticket"></param>
|
||||
/// <param name="tokenEndpointRequest"></param>
|
||||
public OAuthTokenEndpointResponseContext(
|
||||
IOwinContext context,
|
||||
OAuthAuthorizationServerOptions options,
|
||||
AuthenticationTicket ticket,
|
||||
TokenEndpointRequest tokenEndpointRequest,
|
||||
string accessToken,
|
||||
IDictionary<string, object> additionalResponseParameters)
|
||||
: base(context, options)
|
||||
{
|
||||
if (ticket == null)
|
||||
{
|
||||
throw new ArgumentNullException("ticket");
|
||||
}
|
||||
|
||||
Identity = ticket.Identity;
|
||||
Properties = ticket.Properties;
|
||||
TokenEndpointRequest = tokenEndpointRequest;
|
||||
AdditionalResponseParameters = new Dictionary<string, object>(StringComparer.Ordinal);
|
||||
TokenIssued = Identity != null;
|
||||
AccessToken = accessToken;
|
||||
AdditionalResponseParameters = additionalResponseParameters;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the identity of the resource owner.
|
||||
/// </summary>
|
||||
public ClaimsIdentity Identity { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dictionary containing the state of the authentication session.
|
||||
/// </summary>
|
||||
public AuthenticationProperties Properties { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The issued Access-Token
|
||||
/// </summary>
|
||||
public string AccessToken { get; private set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets information about the token endpoint request.
|
||||
/// </summary>
|
||||
public TokenEndpointRequest TokenEndpointRequest { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets whether or not the token should be issued.
|
||||
/// </summary>
|
||||
public bool TokenIssued { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Enables additional values to be appended to the token response.
|
||||
/// </summary>
|
||||
public IDictionary<string, object> AdditionalResponseParameters { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Issues the token.
|
||||
/// </summary>
|
||||
/// <param name="identity"></param>
|
||||
/// <param name="properties"></param>
|
||||
public void Issue(ClaimsIdentity identity, AuthenticationProperties properties)
|
||||
{
|
||||
Identity = identity;
|
||||
Properties = properties;
|
||||
TokenIssued = true;
|
||||
}
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче