OpenID Connect 轻量级库

Posted

技术标签:

【中文标题】OpenID Connect 轻量级库【英文标题】:OpenID Connect lightweight library 【发布时间】:2016-01-20 05:15:53 【问题描述】:

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

    编写“身份验证请求” 验证“id_token”签名 (包括从元数据端点下载证书) 解析“id_token”JWT

唯一受支持的 OIDC 流是所谓的“隐式流”,其中服务器直接从授权端点 (spec link) 以“id_token”(以及“access_token”,如果请求)回答。

搜索 NuGet 存储库似乎会产生唯一合适的选项 - OWIN 中间件,尽管我可以确认它有效,但最好有轻量级的替代方案。

【问题讨论】:

【参考方案1】:

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

为了实现第一个目标,可以使用名为 Thinktecture.IdentityModel.Client (link) 的 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);

关于解析和验证从 OIDC 身份提供者收到的 JWT,System.IdentityModel.Tokens.Jwt (link) 微软的 NuGet 包是一种可行的方法。代码 sn-p 也在下面。

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;

这一切都是轻量级的,可以让您的应用程序保持干净,避免不必要的依赖。

【讨论】:

以上是关于OpenID Connect 轻量级库的主要内容,如果未能解决你的问题,请参考以下文章

python操作轻量级数据库

使用 Azure b2c OpenID Connect 配置 Ckan 的身份验证

OpenID Connect webfinger 端点是用户帐户到 OpenID Connect 提供者的映射吗?

Keycloak, openId-connect userInfo

Nginx 外的另一选择,轻量级开源 Web 服务器 Tengine 发布新版本

Facebook 的 OpenID Connect 配置