Coder Social home page Coder Social logo

winterislander / identitymodel2 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from identitymodel/identitymodel

0.0 1.0 0.0 2.19 MB

.NET standard helper library for claims-based identity, OAuth 2.0 and OpenID Connect.

License: Apache License 2.0

C# 97.89% PowerShell 1.43% Shell 0.69%

identitymodel2's Introduction

IdentityModel

A .NET standard helper library for claims-based identity, OAuth 2.0 and OpenID Connect.

The nuget package can be found here or use the https://www.myget.org/F/identity/ myget feed for CI builds.

DiscoveryClient

Client library to retrieve OpenID Connect discovery documents and key sets.

var client = new HttpClient();

var disco = await client.GetDiscoveryDocumentAsync("https://demo.identityserver.io");
if (disco.IsError) throw new Exception(disco.Error);

var tokenEndpoint = doc.TokenEndpoint;
var keys = doc.KeySet.Keys;

DiscoveryCache

Simple in-memory cache for discovery documents

var cache = new DiscoveryCache(Constants.Authority);

var disco = await cache.GetAsync();
if (disco.IsError) throw new Exception(disco.Error);

TokenClient

Client library for OAuth 2.0 and OpenID Connect token endpoints.

Features:

  • Support for client credentials & resource owner password credential flow
  • Support for exchanging authorization codes with tokens
  • Support for refreshing tokens
  • Support for extensions grants and assertions
  • Support for client secrets via Basic Authentication, POST body and X.509 client certificates
  • Extensible for custom parameters
  • Parsing of token response messages

Example:

var client = new HttpClient();

var response = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
    Address = disco.TokenEndpoint,

    ClientId = "client",
    ClientSecret = "secret",
    Scope = "api1"
});

if (response.IsError) throw new Exception(response.Error);
var token = response.AccessToken;

UserInfoClient

Client library for the OpenID Connect user info endpoint

var client = new HttpClient();

var response = await client.GetUserInfoAsync(new UserInfoRequest
{
    Address = disco.UserInfoEndpoint,
    Token = token
});

if (response.IsError) throw new Exception(response.Error);

foreach (var claim in response.Claims)
{
    Console.WriteLine("{0}\n {1}", claim.Type, claim.Value);
}

IntrospectionClient

Client library for the OAuth 2 introspection endpoint

var client = new HttpClient();
var result = await client.IntrospectTokenAsync(new TokenIntrospectionRequest
{
    Address = disco.IntrospectionEndpoint,

    ClientId = "api1",
    ClientSecret = "secret",
    Token = accessToken
});

if (result.IsError)
{
    Console.WriteLine(result.Error);
}
else
{
    if (result.IsActive)
    {
        result.Claims.ToList().ForEach(c => Console.WriteLine("{0}: {1}",
            c.Type, c.Value));
    }
    else
    {
        Console.WriteLine("token is not active");
    }
}

RequestUrl

Helper class for creating request URLs (e.g. for authorize and end_session).

var request = new RequestUrl(doc.AuthorizationEndpoint);
var url = request.CreateAuthorizeUrl(
    clientId:         "client",
    responseType:     OidcConstants.ResponseTypes.CodeIdToken,
    responseMode:     OidcConstants.ResponseModes.FormPost,
    redirectUri:     "https://myapp.com/callback",
    state:           CryptoRandom.CreateUniqueId(),
    nonce:           CryptoRandom.CreateUniqueId());

AuthorizeResponse

Helper class for parsing OpenID Connect/OAuth 2 authorize responses

var response = new AuthorizeResponse(url);

var accessToken = response.AccessToken;
var idToken = response.IdentityToken;
var state = response.State;

Fluent API to access the X.509 Certificate store

e.g. do
var cert = X509.LocalMachine.My.SubjectDistinguishedName.Find("CN=sts").First();

Base64 URL encoder/decoder

Helper for working with URL safe base64 encodings

Epoch Time Extensions

Helper for converting DateTime and DateTimeOffset to/from Epoch Time

Time Constant Comparer

Helper for comparing strings without leaking timing information

JWT/OpenID Connect Claim Types

Constants for standard claim types used in JWT, OAuth 2.0 and OpenID Connect

OpenID Connect Constants

Constants for the OpenID Connect/OAuth 2 protocol

identitymodel2's People

Contributors

leastprivilege avatar brockallen avatar damianh avatar swisszeni avatar tillig avatar meldow avatar andrew-laughlin avatar bastianeicher avatar beppler avatar johnkors avatar zippy1981 avatar kevindockx avatar scottbrady91 avatar victorioberra avatar xperiandri avatar marcinbelczewski avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.