Udap.Metadata.Server 0.3.74

There is a newer version of this package available.
See the version list below for details.
dotnet add package Udap.Metadata.Server --version 0.3.74                
NuGet\Install-Package Udap.Metadata.Server -Version 0.3.74                
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.74" />                
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.74                
#r "nuget: Udap.Metadata.Server, 0.3.74"                
#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.74

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

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 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.93 106 10/13/2024
0.3.92 76 10/13/2024
0.3.91 74 10/10/2024
0.3.89 72 10/10/2024
0.3.87 73 10/5/2024
0.3.86 76 10/5/2024
0.3.85 78 10/4/2024
0.3.84 81 10/3/2024
0.3.83 77 10/3/2024
0.3.82 101 9/20/2024
0.3.81 76 9/19/2024
0.3.80 80 9/19/2024
0.3.79 83 9/19/2024
0.3.78 73 9/19/2024
0.3.77 78 9/17/2024
0.3.76 78 9/17/2024
0.3.75 82 9/12/2024
0.3.74 105 9/12/2024
0.3.73 100 9/10/2024
0.3.72 89 9/7/2024
0.3.71 102 9/5/2024
0.3.70 102 9/5/2024
0.3.69 102 9/5/2024
0.3.68 102 9/4/2024
0.3.67 91 9/4/2024
0.3.66 91 9/4/2024
0.3.65 99 9/4/2024
0.3.64 89 9/2/2024
0.3.63 96 8/31/2024
0.3.62 83 8/29/2024
0.3.61 92 8/28/2024
0.3.60 71 8/2/2024
0.3.59 81 8/1/2024
0.3.58 81 8/1/2024
0.3.57 95 7/19/2024
0.3.56 84 7/19/2024
0.3.54 97 7/18/2024
0.3.53 87 7/15/2024
0.3.52 81 7/15/2024
0.3.51 97 7/12/2024
0.3.50 96 7/1/2024
0.3.49 96 7/1/2024
0.3.48 133 5/22/2024
0.3.47 108 5/15/2024
0.3.46 88 5/14/2024
0.3.45 94 5/12/2024
0.3.44 97 5/12/2024
0.3.43 86 5/12/2024
0.3.42 89 5/12/2024
0.3.41 118 5/6/2024
0.3.40 127 5/4/2024
0.3.39 87 5/1/2024
0.3.38 137 4/30/2024
0.3.37 97 4/11/2024
0.3.36 107 4/10/2024
0.3.35 104 4/9/2024
0.3.34 111 4/8/2024
0.3.33 108 4/7/2024
0.3.32 109 4/5/2024
0.3.31 104 4/4/2024
0.3.30 110 4/4/2024
0.3.29 99 4/3/2024
0.3.28 111 4/3/2024
0.3.27 100 4/2/2024
0.3.26 101 4/2/2024
0.3.25 95 4/2/2024
0.3.24 174 3/24/2024
0.3.22 144 3/6/2024
0.3.21 127 3/6/2024
0.3.20 108 3/5/2024
0.3.19 118 3/2/2024
0.3.18 120 3/2/2024
0.3.13 123 3/1/2024
0.3.12 99 2/24/2024
0.3.10 106 2/14/2024
0.3.8 114 2/11/2024
0.3.7 105 2/11/2024
0.3.6 103 2/10/2024
0.3.5 114 2/10/2024
0.3.4 98 2/10/2024
0.3.2 110 2/10/2024
0.3.0 114 1/31/2024
0.2.21 225 10/24/2023
0.2.20 94 10/23/2023
0.2.19 133 10/20/2023
0.2.18 142 10/11/2023
0.2.17 138 10/5/2023
0.2.16 109 9/21/2023
0.2.15 113 9/21/2023
0.2.14 115 9/20/2023
0.2.13 108 9/20/2023
0.2.12 120 9/20/2023
0.2.11 119 9/19/2023
0.2.10 125 9/13/2023
0.2.9 194 8/26/2023
0.2.8 136 8/18/2023
0.2.7 153 8/15/2023
0.2.6 151 8/12/2023
0.2.5 156 8/11/2023
0.2.4 148 8/10/2023
0.2.3 200 8/2/2023
0.2.2 188 8/1/2023
0.2.1 186 7/25/2023
0.2.0 206 7/16/2023
0.1.24 165 5/26/2023
0.1.23 180 5/22/2023
0.1.22 163 5/22/2023
0.1.21 185 5/21/2023
0.1.20 163 5/20/2023
0.1.17 140 5/9/2023
0.1.16 113 5/6/2023
0.1.15 143 5/4/2023
0.1.14 157 5/2/2023
0.1.12 144 5/1/2023
0.1.11 140 4/29/2023
0.1.9 151 4/29/2023
0.1.8 146 4/29/2023
0.1.7 148 4/28/2023
0.1.6 142 4/27/2023
0.1.5 140 4/27/2023
0.1.4 143 4/25/2023
0.1.3 160 4/23/2023
0.1.2 143 4/22/2023
0.1.1 178 4/22/2023
0.0.4-preview040 121 4/21/2023
0.0.4-preview039 120 4/13/2023
0.0.4-preview038 115 4/11/2023
0.0.4-preview037 125 4/7/2023
0.0.4-preview036 119 3/31/2023
0.0.4-preview035 119 3/31/2023
0.0.4-preview034 121 3/31/2023
0.0.4-preview033 115 3/30/2023
0.0.4-preview032 177 3/19/2023
0.0.4-preview029 124 3/18/2023
0.0.4-preview028 123 3/15/2023
0.0.4-preview027 119 3/13/2023
0.0.4-preview026 97 3/12/2023
0.0.4-preview025 104 3/10/2023
0.0.4-preview024 122 3/9/2023
0.0.4-preview022 137 3/9/2023
0.0.4-preview021 131 3/7/2023
0.0.4-preview020 119 3/7/2023
0.0.4-preview019 118 3/4/2023
0.0.4-preview018 125 3/4/2023
0.0.4-preview017 120 3/4/2023
0.0.4-preview016 129 3/1/2023
0.0.4-preview015 123 2/28/2023
0.0.4-preview014 134 2/23/2023
0.0.4-preview013 124 2/23/2023
0.0.4-preview012 142 2/21/2023
0.0.4-preview011 137 2/20/2023
0.0.4-preview010 123 2/20/2023
0.0.4-preview009 130 2/19/2023
0.0.4-preview008 129 2/14/2023
0.0.4-preview007 115 2/10/2023
0.0.4-preview006 125 2/8/2023
0.0.4-preview005 128 2/8/2023
0.0.4-preview004 130 2/7/2023
0.0.4-preview003 121 2/7/2023
0.0.4-preview002 106 2/7/2023
0.0.4-preview001 122 2/3/2023
0.0.4-preview000 149 2/2/2023
0.0.3-preview032 127 2/1/2023
0.0.3-preview031 139 2/1/2023
0.0.3-preview030 139 1/30/2023
0.0.3-preview029 131 1/21/2023
0.0.3-preview028 133 1/19/2023
0.0.3-preview027 132 1/18/2023
0.0.3-preview026 129 1/16/2023
0.0.3-preview025 136 1/15/2023
0.0.3-preview024 126 1/15/2023
0.0.3-preview020 134 1/15/2023
0.0.3-preview019 152 1/11/2023
0.0.3-preview018 135 1/11/2023
0.0.3-preview017 137 1/7/2023
0.0.3-preview016 129 1/7/2023
0.0.3-preview015 134 1/6/2023
0.0.3-preview014 140 1/6/2023
0.0.3-preview013 134 1/6/2023
0.0.3-preview012 128 1/6/2023
0.0.3-preview011 130 1/6/2023
0.0.3-preview010 137 1/3/2023
0.0.3-preview009 142 1/3/2023
0.0.3-preview008 147 1/2/2023
0.0.3-preview007 143 1/2/2023
0.0.3-preview006 131 1/2/2023
0.0.3-preview005 121 1/2/2023
0.0.3-preview004 129 1/1/2023
0.0.3-preview003 124 12/31/2022
0.0.3-preview002 169 12/28/2022
0.0.3-preview001 157 12/21/2022
0.0.3-preview000 135 11/29/2022
0.0.2-preview003 137 11/4/2022
0.0.2-preview002 132 11/4/2022
0.0.2-preview000 161 11/4/2022
0.0.1-preview3373625764 165 11/1/2022
0.0.1-preview002 161 11/4/2022
0.0.1-preview001 167 11/4/2022