Udap.Metadata.Server 0.3.39

dotnet add package Udap.Metadata.Server --version 0.3.39
NuGet\Install-Package Udap.Metadata.Server -Version 0.3.39
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Udap.Metadata.Server" Version="0.3.39" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Udap.Metadata.Server --version 0.3.39
#r "nuget: Udap.Metadata.Server, 0.3.39"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Udap.Metadata.Server as a Cake Addin
#addin nuget:?package=Udap.Metadata.Server&version=0.3.39

// Install Udap.Metadata.Server as a Cake Tool
#tool nuget:?package=Udap.Metadata.Server&version=0.3.39

Udap.Metadata.Server

UDAP logo

📦 Nuget Package: Udap.Client

This package includes a MVC controller, an extension method to load, and an implementation if ICertificateStore as FileCertificateStore so you can get a sample up and running quickly.

Program.cs could be as easy as this example.


using Udap.Common;
using Udap.Metadata.Server;

var builder = WebApplication.CreateBuilder(args);
builder.Services
    .AddControllers()
    .UseUdapMetaDataServer(builder.Configuration);

builder.Services.AddSingleton<ICertificateStore, MyCustomCertificateStore>();

Full Example

Below is a full example. Alternatively the 2023 FHIR® DevDays Tutorial is another great way to learn how to use Udap.Metadata.Server.

Add this package to your FHIR® server or any web api server to.


dotnet new sln -o WebApiProject1
cd WebApiProject1

dotnet new webapi -o WebApi1 -minimal
dotnet sln add ./WebApi1/WebApi1.csproj

cd WebApi1

dotnet add package Udap.Metadata.Server 

Or until a first release use the --prerelease tag.


dotnet add package Udap.Metadata.Server --prerelease

dotnet build

Add UseUdapMetaData to program.cs


 builder.Services
    .AddControllers()
    .AddUdapMetaDataServer(builder.Configuration);

AddUdapMetaDataServer extension will find the UdapMetadataOptions in AppSettings. These settings will match the issued certificate.

Reference Required UDAP Metadata.

Issuer and Subject must match the issued certificates, Subject Alternative Name extension. The issued certificate is the first certificate present in the x5c JWT header.


"UdapMetadataOptions": {
    "UdapMetadataConfigs": [
      {
        "Community": "http://localhost",
        "SignedMetadataConfig": {
          "AuthorizationEndPoint": "https://securedcontrols.net:5001/connect/authorize",
          "TokenEndpoint": "https://securedcontrols.net:5001/connect/token",
          "RegistrationEndpoint": "https://securedcontrols.net:5001/connect/register"
        }
      }
    ]
  }

To serve UDAP metadata, certificates will be loaded through an implementation of ICertificatStore. Below is a built-in file-based implementation for lab experiments.


// UDAP CertStore
builder.Services.Configure<UdapFileCertStoreManifest>(builder.Configuration.GetSection("UdapFileCertStoreManifest"));
builder.Services.AddSingleton<ICertificateStore, FileCertificateStore>();

To continue this example, copy the following files from the Udap.PKI.Generator test project output to the following directory structure at the root of the WebApi1 project. Ensure each file's "Copy to Output Directory" is set to copy.

  • CertStore
    • anchors
      • anchorLocalhostCert.cer
    • issued
      • weatherApiClientLocalhostCert.pfx
    • anchors
      • caLocalhostCert.cer

Add configuration to AppSettings to point to the certificates.

Note From AppSettings

UdapMetadataOptions:UdapMetadataConfigs:Community value is the link to UdapFileCertStoreManifest:ResourceServers:Communities.Name. So in this example the community is identified by the name http://localhost. Community names are constrained as a URI


/*   
  Normally put someplace safer like secrets.json or secured database
  and add this to Program.cs.    
*/

"UdapFileCertStoreManifest": {
  "Communities": [
    {
      "Name": "http://localhost",
      "Anchors": [
        {
          "FilePath": "CertStore/anchors/caLocalhostCert.cer"
        }
      ],
      "Intermediates": [
        "CertStore/intermediates/anchorLocalhostCert.cer"
      ],
      "IssuedCerts": [
        {
          "FilePath": "CertStore/issued/weatherApiClientLocalhostCert.pfx",
          "Password": "udap-test"
        }
      ]
    }
  ]    
}

dotnet run

Navigate to http://localhost:5079/.well-known/udap or http://localhost:5079/swagger.

A this point a success would result in a result similar to the following json. Ensure the signed_metadata property contains a signed JWT token.

<details open><summary><a>View Metadata</></summary>


{
  "udap_versions_supported": [
    "1"
  ],
  "udap_profiles_supported": [
    "udap_dcr",
    "udap_authn",
    "udap_authz"
  ],
  "udap_authorization_extensions_supported": [
    "hl7-b2b"
  ],
  "udap_authorization_extensions_required": [
    "hl7-b2b"
  ],
  "udap_certifications_supported": [
    "http://MyUdapCertification",
    "http://MyUdapCertification2"
  ],
  "udap_certifications_required": [
    "http://MyUdapCertification"
  ],
  "grant_types_supported": [
    "client_credentials"
  ],
  "scopes_supported": [
    "openid",
    "system/Patient.read",
    "system/AllergyIntolerance.read",
    "system/Procedures.read",
    "system/Observation.read"
  ],
  "authorization_endpoint": "https://securedcontrols.net/connect/authorize",
  "token_endpoint": "https://securedcontrols.net/connect/token",
  "token_endpoint_auth_methods_supported": [
    "private_key_jwt"
  ],
  "token_endpoint_auth_signing_alg_values_supported": [
    "RS256"
  ],
  "registration_endpoint": "https://securedcontrols.net/connect/register",
  "registration_endpoint_jwt_signing_alg_values_supported": [
    "RS256"
  ],
  "signed_metadata": "eyJhbGciOiJSUzI1NiIsIng1YyI6WyJNSUlGR3pDQ0JBT2dBd0lCQWdJSUZSVVJqcWdlTkdNd0RRWUpLb1pJaHZjTkFRRUxCUUF3Z2JNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlEQXBEWVd4cFptOXlibWxoTVJJd0VBWURWUVFIREFsVFlXNGdSR2xsWjI4eEV6QVJCZ05WQkFvTUNrVk5VaUJFYVhKbFkzUXhQekE5QmdOVkJBc01ObFJsYzNRZ1VFdEpJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNUlDaGpaWEowY3k1bGJYSmthWEpsWTNRdVkyOXRLVEVsTUNNR0ExVUVBd3djUlUxU0lFUnBjbVZqZENCVVpYTjBJRU5zYVdWdWRDQlRkV0pEUVRBZUZ3MHlNakE1TVRVeU1ETXpOVEphRncweU16QTVNVFV5TURNek5USmFNSUdwTVFzd0NRWURWUVFHRXdKVlV6RVBNQTBHQTFVRUNBd0dUM0psWjI5dU1TZ3dKZ1lEVlFRS0RCOVRkWEpsYzJOeWFYQjBjeUJNVEVNZ0tITmxiR1lnWVhOelpYSjBaV1FwTVRNd01RWURWUVFMRENwVlJFRlFJRlJsYzNRZ1EyVnlkR2xtYVdOaGRHVWdUazlVSUVaUFVpQlZVMFVnVjBsVVNDQlFTRWt4S2pBb0JnTlZCQU1NSVdoMGRIQnpPaTh2Wm1ocGNteGhZbk11Ym1WME9qY3dNVFl2Wm1ocGNpOXlORENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFJQkgrSUtIRUJ4SDIyN09BYkRsTGYxS0k4b1UxZE8vZmp2ZzFQbkJNSlQ0RjQrL1BFWmlOdkRhS0dFT09lOXVvTmVMdGlEWEt0aFVQSEdEMm54RXVSL2lQeXluVmFETmtHYkZvc2d3c01JMXU4bGFJbHNwQWVrR2d5VWlPZzB3a1NRbEF4TjJuaFVqR3dMbjllUzBPWld0eGhUcHBNNEFGbElwY1hackFLeTlOZm53S2NGeUtvUmg3Zlo4bDlSR1hHeFl6ZXh2ejJ0LzhCbG5xb3ZQODZlWktHaFBxTTlFTGZPNTc4R1UrNWJCcFNqWUdsenhwemVnanZaUkR5bnBVbEJBdEtvWDBOdXh6ZjJ6SURvOVZwaldoVG9TKzZ0eDZJRFVNZVdEZHZjQytPQnNTNjNUdisxN2VFSVdpRjlGb0xNYUNUZXJRMFluaWlwVGQ3NDdGT2NDQXdFQUFhT0NBVGt3Z2dFMU1Ga0dDQ3NHQVFVRkJ3RUJCRTB3U3pCSkJnZ3JCZ0VGQlFjd0FvWTlhSFIwY0RvdkwyTmxjblJ6TG1WdGNtUnBjbVZqZEM1amIyMHZZMlZ5ZEhNdlJVMVNSR2x5WldOMFZHVnpkRU5zYVdWdWRGTjFZa05CTG1OeWREQWRCZ05WSFE0RUZnUVVuMDUzdk9jYVdINzRsR1c4VVlYazk4WU5nOUV3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNqbFcxcnZTdFJ6ZUhQNVpCdjF5WlB2OTArM2pCTUJnTlZIUjhFUlRCRE1FR2dQNkE5aGp0b2RIUndPaTh2WTJWeWRITXVaVzF5WkdseVpXTjBMbU52YlM5amNtd3ZSVTFTUkdseVpXTjBWR1Z6ZEVOc2FXVnVkRk4xWWtOQkxtTnliREFPQmdOVkhROEJBZjhFQkFNQ0I0QXdMQVlEVlIwUkJDVXdJNFloYUhSMGNITTZMeTltYUdseWJHRmljeTV1WlhRNk56QXhOaTltYUdseUwzSTBNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUI1VkswWkhWZXpMdUYvY2FieW1ZOWFLa0pENXhxY0JWVFNjeGVYQ3NMaWloLzhFS0NwdmVVSWl6NDJ5U3JtbHBJS2ljby95c1ByWHZKbU8vVnJHMjFWbnpZNkZKQjE3empXbkQ2bncvRnRFNXU0V2laTTE2aGcxUzJpa01FYXMzRjU3L3FrYjNLMzdXUm1IVDdickphUUtGZFYzWWRrVFloZ1cvbjFTellqWnEwZ0w0bDZWcVBSeCsxSWpaUkQxNWowZVFOV1hrR1lvWmlsR3duSFFJOUhKSGxadmMxZ1VLeFl2dDhwR2hlL0ZwZmF0cW9QVlhVY09CRVlBTHNrNmdlUDBhR0Z1M0xQa3NxdjZpZTM2M01tZWp5WEtxeE1uUThHcUR1bVNBU1ZhbDhyVmw4ZjE1NzlwUDc4aGxDYWNzam4zdTBnNVJLRDVPUk4rQTlJTTRDMyJdfQ.eyJpc3MiOiJodHRwczovL3N0YWdlLmhlYWx0aHRvZ28ubWU6ODE4MSIsInN1YiI6Imh0dHBzOi8vc3RhZ2UuaGVhbHRodG9nby5tZTo4MTgxIiwiaWF0IjoxNjc2OTM3NjI3LCJleHAiOjE2NzY5Mzc2ODcsImp0aSI6Ik95N0RaenVhXzBYbDhEaFNRXzVONzFxeHFBcllLdEI3OUdmRkVGQVFaUkUiLCJhdXRob3JpemF0aW9uX2VuZHBvaW50IjoiaHR0cHM6Ly9zZWN1cmVkY29udHJvbHMubmV0L2Nvbm5lY3QvYXV0aG9yaXplIiwidG9rZW5fZW5kcG9pbnQiOiJodHRwczovL3NlY3VyZWRjb250cm9scy5uZXQvY29ubmVjdC90b2tlbiIsInJlZ2lzdHJhdGlvbl9lbmRwb2ludCI6Imh0dHBzOi8vc2VjdXJlZGNvbnRyb2xzLm5ldC9jb25uZWN0L3JlZ2lzdGVyIn0.Y9qWVQFs9HXWipN8YDrH7gf89FoA0V7f3p9vqc6bPuqrcI0B6wgqZ2ZC3FYi46nGvpe6G_H20edXYR7zIHqcXqhtjfYNmCYoH-ceVwvq6kCAm0c4v8BXN23SM1Eh72_481Bbf7PidHUzcAIOn7fJ9DAk-LiVsT9aa7TD2Aj11cLC5ZiuoHyLCOaf6sjK-yX707ov313TEQREgLbSnl-YTwbIgmm_h3fW4eSZH2eszdr3a3Q8BWKKVBphWos5TvQ77WsYfTt60JfFHEXO8Psq7n4bGm2ZcNApzoa9PIuimmzeN8vjyaLBu7lDi93cc9jKphYz3KpLh_-8ruHF2HqmNw"
}

</details> <br/>

UDAP Resource Server Examples

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Udap.Metadata.Server:

Package Downloads
Udap.Metadata.Vonk.Server

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.3.39 54 5/1/2024
0.3.38 73 4/30/2024
0.3.37 73 4/11/2024
0.3.36 77 4/10/2024
0.3.35 80 4/9/2024
0.3.34 83 4/8/2024
0.3.33 88 4/7/2024
0.3.32 94 4/5/2024
0.3.31 81 4/4/2024
0.3.30 83 4/4/2024
0.3.29 79 4/3/2024
0.3.28 80 4/3/2024
0.3.27 79 4/2/2024
0.3.26 74 4/2/2024
0.3.25 75 4/2/2024
0.3.24 147 3/24/2024
0.3.22 126 3/6/2024
0.3.21 104 3/6/2024
0.3.20 82 3/5/2024
0.3.19 86 3/2/2024
0.3.18 85 3/2/2024
0.3.13 85 3/1/2024
0.3.12 75 2/24/2024
0.3.10 79 2/14/2024
0.3.8 91 2/11/2024
0.3.7 81 2/11/2024
0.3.6 84 2/10/2024
0.3.5 86 2/10/2024
0.3.4 82 2/10/2024
0.3.2 90 2/10/2024
0.3.0 91 1/31/2024
0.2.21 197 10/24/2023
0.2.20 81 10/23/2023
0.2.19 102 10/20/2023
0.2.18 122 10/11/2023
0.2.17 106 10/5/2023
0.2.16 90 9/21/2023
0.2.15 92 9/21/2023
0.2.14 94 9/20/2023
0.2.13 91 9/20/2023
0.2.12 94 9/20/2023
0.2.11 89 9/19/2023
0.2.10 107 9/13/2023
0.2.9 166 8/26/2023
0.2.8 111 8/18/2023
0.2.7 132 8/15/2023
0.2.6 132 8/12/2023
0.2.5 131 8/11/2023
0.2.4 123 8/10/2023
0.2.3 173 8/2/2023
0.2.2 163 8/1/2023
0.2.1 147 7/25/2023
0.2.0 183 7/16/2023
0.1.24 130 5/26/2023
0.1.23 143 5/22/2023
0.1.22 133 5/22/2023
0.1.21 154 5/21/2023
0.1.20 136 5/20/2023
0.1.17 113 5/9/2023
0.1.16 108 5/6/2023
0.1.15 119 5/4/2023
0.1.14 140 5/2/2023
0.1.12 122 5/1/2023
0.1.11 116 4/29/2023
0.1.9 132 4/29/2023
0.1.8 127 4/29/2023
0.1.7 130 4/28/2023
0.1.6 123 4/27/2023
0.1.5 119 4/27/2023
0.1.4 125 4/25/2023
0.1.3 139 4/23/2023
0.1.2 134 4/22/2023
0.1.1 153 4/22/2023
0.0.4-preview040 101 4/21/2023
0.0.4-preview039 101 4/13/2023
0.0.4-preview038 101 4/11/2023
0.0.4-preview037 104 4/7/2023
0.0.4-preview036 107 3/31/2023
0.0.4-preview035 97 3/31/2023
0.0.4-preview034 100 3/31/2023
0.0.4-preview033 99 3/30/2023
0.0.4-preview032 161 3/19/2023
0.0.4-preview029 120 3/18/2023
0.0.4-preview028 104 3/15/2023
0.0.4-preview027 106 3/13/2023
0.0.4-preview026 79 3/12/2023
0.0.4-preview025 94 3/10/2023
0.0.4-preview024 96 3/9/2023
0.0.4-preview022 119 3/9/2023
0.0.4-preview021 111 3/7/2023
0.0.4-preview020 106 3/7/2023
0.0.4-preview019 105 3/4/2023
0.0.4-preview018 107 3/4/2023
0.0.4-preview017 107 3/4/2023
0.0.4-preview016 116 3/1/2023
0.0.4-preview015 104 2/28/2023
0.0.4-preview014 107 2/23/2023
0.0.4-preview013 110 2/23/2023
0.0.4-preview012 123 2/21/2023
0.0.4-preview011 107 2/20/2023
0.0.4-preview010 107 2/20/2023
0.0.4-preview009 111 2/19/2023
0.0.4-preview008 100 2/14/2023
0.0.4-preview007 101 2/10/2023
0.0.4-preview006 109 2/8/2023
0.0.4-preview005 107 2/8/2023
0.0.4-preview004 109 2/7/2023
0.0.4-preview003 103 2/7/2023
0.0.4-preview002 88 2/7/2023
0.0.4-preview001 105 2/3/2023
0.0.4-preview000 117 2/2/2023
0.0.3-preview032 116 2/1/2023
0.0.3-preview031 109 2/1/2023
0.0.3-preview030 121 1/30/2023
0.0.3-preview029 116 1/21/2023
0.0.3-preview028 113 1/19/2023
0.0.3-preview027 111 1/18/2023
0.0.3-preview026 112 1/16/2023
0.0.3-preview025 113 1/15/2023
0.0.3-preview024 120 1/15/2023
0.0.3-preview020 110 1/15/2023
0.0.3-preview019 136 1/11/2023
0.0.3-preview018 119 1/11/2023
0.0.3-preview017 117 1/7/2023
0.0.3-preview016 111 1/7/2023
0.0.3-preview015 119 1/6/2023
0.0.3-preview014 114 1/6/2023
0.0.3-preview013 115 1/6/2023
0.0.3-preview012 114 1/6/2023
0.0.3-preview011 114 1/6/2023
0.0.3-preview010 117 1/3/2023
0.0.3-preview009 120 1/3/2023
0.0.3-preview008 129 1/2/2023
0.0.3-preview007 125 1/2/2023
0.0.3-preview006 113 1/2/2023
0.0.3-preview005 106 1/2/2023
0.0.3-preview004 111 1/1/2023
0.0.3-preview003 107 12/31/2022
0.0.3-preview002 147 12/28/2022
0.0.3-preview001 136 12/21/2022
0.0.3-preview000 113 11/29/2022
0.0.2-preview003 113 11/4/2022
0.0.2-preview002 118 11/4/2022
0.0.2-preview000 140 11/4/2022
0.0.1-preview3373625764 133 11/1/2022
0.0.1-preview002 140 11/4/2022
0.0.1-preview001 143 11/4/2022