Udap.Metadata.Server 0.4.0

dotnet add package Udap.Metadata.Server --version 0.4.0                
NuGet\Install-Package Udap.Metadata.Server -Version 0.4.0                
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.4.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Udap.Metadata.Server --version 0.4.0                
#r "nuget: Udap.Metadata.Server, 0.4.0"                
#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.4.0

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

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 IssuedCerts settings in UdapFileCertStoreManifest settings below.

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": {
  "UdapVersionsSupported": [ "1" ],
    "UdapProfilesSupported": [ "udap_dcr", "udap_authn", "udap_authz", "udap_to" ],
    "UdapAuthorizationExtensionsSupported": [ "hl7-b2b" ],
    "UdapAuthorizationExtensionsRequired": [ "hl7-b2b" ],
    "ScopesSupported": [ "openid", "system/*.read", "user/*.read", "patient/*.read" ],
    "UdapCertificationsSupported": [ "http://MyUdapCertification", "http://MyUdapCertification2" ],
    "UdapCertificationsRequired": [ "http://MyUdapCertification" ],
    "GrantTypesSupported": [ "authorization_code", "refresh_token", "client_credentials" ],
    //"TokenEndpointAuthSigningAlgValuesSupported": [ "RS256", "RS384", "ES256", "ES384" ],
    //"RegistrationEndpointJwtSigningAlgValuesSupported": [ "RS256", "RS384", "ES256", "ES384" ],
    
    "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 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.  net9.0 is compatible. 
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.4.0 94 12/14/2024
0.3.96 146 11/6/2024
0.3.95 91 11/2/2024
0.3.94 81 10/31/2024
0.3.93 216 10/13/2024
0.3.92 92 10/13/2024
0.3.91 88 10/10/2024
0.3.89 84 10/10/2024
0.3.87 86 10/5/2024
0.3.86 88 10/5/2024
0.3.85 88 10/4/2024
0.3.84 95 10/3/2024
0.3.83 93 10/3/2024
0.3.82 111 9/20/2024
0.3.81 88 9/19/2024
0.3.80 90 9/19/2024
0.3.79 92 9/19/2024
0.3.78 82 9/19/2024
0.3.77 87 9/17/2024
0.3.76 89 9/17/2024
0.3.75 93 9/12/2024
0.3.74 114 9/12/2024
0.3.73 109 9/10/2024
0.3.72 98 9/7/2024
0.3.71 111 9/5/2024
0.3.70 111 9/5/2024
0.3.69 111 9/5/2024
0.3.68 111 9/4/2024
0.3.67 104 9/4/2024
0.3.66 102 9/4/2024
0.3.65 108 9/4/2024
0.3.64 103 9/2/2024
0.3.63 106 8/31/2024
0.3.62 91 8/29/2024
0.3.61 104 8/28/2024
0.3.60 82 8/2/2024
0.3.59 91 8/1/2024
0.3.58 89 8/1/2024
0.3.57 106 7/19/2024
0.3.56 97 7/19/2024
0.3.54 108 7/18/2024
0.3.53 101 7/15/2024
0.3.52 91 7/15/2024
0.3.51 107 7/12/2024
0.3.50 104 7/1/2024
0.3.49 104 7/1/2024
0.3.48 143 5/22/2024
0.3.47 118 5/15/2024
0.3.46 98 5/14/2024
0.3.45 102 5/12/2024
0.3.44 105 5/12/2024
0.3.43 100 5/12/2024
0.3.42 97 5/12/2024
0.3.41 126 5/6/2024
0.3.40 135 5/4/2024
0.3.39 93 5/1/2024
0.3.38 158 4/30/2024
0.3.37 105 4/11/2024
0.3.36 113 4/10/2024
0.3.35 112 4/9/2024
0.3.34 119 4/8/2024
0.3.33 118 4/7/2024
0.3.32 115 4/5/2024
0.3.31 110 4/4/2024
0.3.30 116 4/4/2024
0.3.29 105 4/3/2024
0.3.28 119 4/3/2024
0.3.27 106 4/2/2024
0.3.26 107 4/2/2024
0.3.25 103 4/2/2024
0.3.24 198 3/24/2024
0.3.22 153 3/6/2024
0.3.21 135 3/6/2024
0.3.20 114 3/5/2024
0.3.19 124 3/2/2024
0.3.18 126 3/2/2024
0.3.13 131 3/1/2024
0.3.12 107 2/24/2024
0.3.10 112 2/14/2024
0.3.8 126 2/11/2024
0.3.7 119 2/11/2024
0.3.6 113 2/10/2024
0.3.5 124 2/10/2024
0.3.4 108 2/10/2024
0.3.2 124 2/10/2024
0.3.0 120 1/31/2024
0.2.21 237 10/24/2023
0.2.20 102 10/23/2023
0.2.19 141 10/20/2023
0.2.18 150 10/11/2023
0.2.17 144 10/5/2023
0.2.16 115 9/21/2023
0.2.15 119 9/21/2023
0.2.14 121 9/20/2023
0.2.13 114 9/20/2023
0.2.12 126 9/20/2023
0.2.11 129 9/19/2023
0.2.10 131 9/13/2023
0.2.9 200 8/26/2023
0.2.8 142 8/18/2023
0.2.7 163 8/15/2023
0.2.6 157 8/12/2023
0.2.5 162 8/11/2023
0.2.4 154 8/10/2023
0.2.3 208 8/2/2023
0.2.2 194 8/1/2023
0.2.1 192 7/25/2023
0.2.0 212 7/16/2023
0.1.24 171 5/26/2023
0.1.23 186 5/22/2023
0.1.22 169 5/22/2023
0.1.21 193 5/21/2023
0.1.20 169 5/20/2023
0.1.17 148 5/9/2023
0.1.16 119 5/6/2023
0.1.15 149 5/4/2023
0.1.14 163 5/2/2023
0.1.12 150 5/1/2023
0.1.11 146 4/29/2023
0.1.9 157 4/29/2023
0.1.8 152 4/29/2023
0.1.7 154 4/28/2023
0.1.6 148 4/27/2023
0.1.5 146 4/27/2023
0.1.4 149 4/25/2023
0.1.3 166 4/23/2023
0.1.2 155 4/22/2023
0.1.1 184 4/22/2023
0.0.4-preview040 125 4/21/2023
0.0.4-preview039 124 4/13/2023
0.0.4-preview038 119 4/11/2023
0.0.4-preview037 129 4/7/2023
0.0.4-preview036 125 3/31/2023
0.0.4-preview035 123 3/31/2023
0.0.4-preview034 129 3/31/2023
0.0.4-preview033 123 3/30/2023
0.0.4-preview032 183 3/19/2023
0.0.4-preview029 130 3/18/2023
0.0.4-preview028 127 3/15/2023
0.0.4-preview027 125 3/13/2023
0.0.4-preview026 101 3/12/2023
0.0.4-preview025 108 3/10/2023
0.0.4-preview024 126 3/9/2023
0.0.4-preview022 141 3/9/2023
0.0.4-preview021 139 3/7/2023
0.0.4-preview020 123 3/7/2023
0.0.4-preview019 124 3/4/2023
0.0.4-preview018 129 3/4/2023
0.0.4-preview017 124 3/4/2023
0.0.4-preview016 133 3/1/2023
0.0.4-preview015 127 2/28/2023
0.0.4-preview014 138 2/23/2023
0.0.4-preview013 128 2/23/2023
0.0.4-preview012 146 2/21/2023
0.0.4-preview011 141 2/20/2023
0.0.4-preview010 127 2/20/2023
0.0.4-preview009 136 2/19/2023
0.0.4-preview008 133 2/14/2023
0.0.4-preview007 122 2/10/2023
0.0.4-preview006 129 2/8/2023
0.0.4-preview005 132 2/8/2023
0.0.4-preview004 134 2/7/2023
0.0.4-preview003 125 2/7/2023
0.0.4-preview002 110 2/7/2023
0.0.4-preview001 127 2/3/2023
0.0.4-preview000 153 2/2/2023
0.0.3-preview032 131 2/1/2023
0.0.3-preview031 143 2/1/2023
0.0.3-preview030 143 1/30/2023
0.0.3-preview029 137 1/21/2023
0.0.3-preview028 137 1/19/2023
0.0.3-preview027 136 1/18/2023
0.0.3-preview026 133 1/16/2023
0.0.3-preview025 140 1/15/2023
0.0.3-preview024 132 1/15/2023
0.0.3-preview020 138 1/15/2023
0.0.3-preview019 156 1/11/2023
0.0.3-preview018 139 1/11/2023
0.0.3-preview017 141 1/7/2023
0.0.3-preview016 135 1/7/2023
0.0.3-preview015 138 1/6/2023
0.0.3-preview014 144 1/6/2023
0.0.3-preview013 138 1/6/2023
0.0.3-preview012 134 1/6/2023
0.0.3-preview011 134 1/6/2023
0.0.3-preview010 141 1/3/2023
0.0.3-preview009 146 1/3/2023
0.0.3-preview008 151 1/2/2023
0.0.3-preview007 147 1/2/2023
0.0.3-preview006 137 1/2/2023
0.0.3-preview005 125 1/2/2023
0.0.3-preview004 135 1/1/2023
0.0.3-preview003 128 12/31/2022
0.0.3-preview002 175 12/28/2022
0.0.3-preview001 161 12/21/2022
0.0.3-preview000 139 11/29/2022
0.0.2-preview003 141 11/4/2022
0.0.2-preview002 136 11/4/2022
0.0.2-preview000 165 11/4/2022
0.0.1-preview3373625764 171 11/1/2022
0.0.1-preview002 167 11/4/2022
0.0.1-preview001 171 11/4/2022