OpenID Connect轻量级库

Eug*_*kov 11 .net c# openid single-sign-on openid-connect

我正在寻找将实现这些例程的OpenID Connect(OIDC)依赖方轻量级库.

  1. 撰写"身份验证请求"
  2. 验证"id_token"签名(包括从元数据端点下载证书)
  3. 解析"id_token"JWT

要支持的唯一OIDC流是所谓的" 隐式流 ",其中服务器从授权端点(规范链接)回答"id_token"(以及"access_token",如果请求).

搜索NuGet存储库似乎只能产生唯一合适的选项--OWIN中间件,即使我可以确认它有效,但最好还是选择轻量级替代品.

OIDC隐含流量

Eug*_*kov 16

只是分享对我有用的东西.

为了实现第一个目标,可以使用称为Thinktecture.IdentityModel.Client(链接)的NuGet包(来自IdentityServer创建者的包本身就是令人难以置信的).显示基本用法的示例如下.

var client = new OAuth2Client(new Uri(AuthorizeEndpointUrl));

string url = client.CreateAuthorizeUrl(
    clientId: ClientId,
    redirectUri: RedirectUri,
    responseType: "id_token",
    responseMode: "form_post",
    nonce: Guid.NewGuid().ToString(),
    additionalValues: additionalValues);
Run Code Online (Sandbox Code Playgroud)

至于从OIDC身份提供商收到的JWT的解析和验证,System.IdentityModel.Tokens.Jwt(链接)微软的NuGet包是一种方法.代码片段也是如此.

var parameters = new TokenValidationParameters()
{
    IssuerSigningTokens = GetSigningTokens(MetadataEndpointUrl),
    ValidAudience = ValidAudience,
    ValidIssuer = ValidIssuer,
};

var tokenHandler = new JwtSecurityTokenHandler();

SecurityToken validated;
tokenHandler.ValidateToken(jwt, parameters, out validated);

return validated as JwtSecurityToken;
Run Code Online (Sandbox Code Playgroud)

这一切都是轻量级的,可以保护您的应用程

NuGets