问题标签 [openiddict]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1883 浏览

asp.net-core - ASP.NET Core Openiddict 抛出“无法从此端点返回 OpenID Connect 响应”

我使用来自https://github.com/openiddict/openiddict-samples/tree/master/samples/PasswordFlow的密码流按照 openiddict 服务器示例中的说明进行操作, 但没有成功。

它抛出InvalidOperationException: An OpenID Connect response cannot be returned from this endpoint at route /connect/token

return SignIn(ticket.Principal, ticket.Properties, ticket.AuthenticationScheme);

邮递员参数:

  • 内容类型: application/x-www-form-urlencoded
  • 参数: username=..&password=...&grantType=password&scope=offline_access+profile+email

我花了一天的时间进行研究,但没有关于无法从此端点异常返回的信息。除了我之外,很多人都可以运行 openiddict 示例。

这是 Startup.cs 的一部分:

编辑:我认为问题是OpenIdConnectRequest,如果使用它不能被绑定:

OpenIddictBuiler.AddMvcBinders()

将抛出 OpenID Connect 请求无法从 ASP.NET 上下文中检索到。`

否则,去掉它,AuthorizationController中的OpenIdConnectRequest就可以正常获取了。而且我可以获取请求信息,例如用户名、密码 grantType 等……奇怪……对吧?

其他一些信息:

任何帮助将不胜感激!

0 投票
2 回答
5102 浏览

c# - .net 核心 - Jwt 中间件身份验证签名密钥被忽略

我正在使用配置为使用 json Web 令牌的 openiddict:

我已通过 JWT 中间件按以下方式配置:

如您所见,颁发者签名密钥设置为对称密钥:

但是创建的 jwt access_tokens 已将alg声明设置为RS256,因此似乎此设置被忽略了,并且 openiddict 使用 RSA 私钥对生成的令牌进行签名

0 投票
2 回答
1161 浏览

asp.net - OpenIddict - 在同一个项目中托管身份验证服务器和 Web api 资源

我想使用 OpenIddict 实现 OpenIdConnect/Oauth2 服务器,以保护 .NET 核心 API 应用程序的安全。我见过的大多数示例都将这些作为单独的项目实现。

客户端应用程序是一个 SPA,我们使用的是隐式流。

我的解决方案基于此处 OpenIddict 示例中显示的代码: https ://github.com/openiddict/openiddict-samples

对于我正在处理的项目,理想情况下让 Auth 服务器和 API 使用相同的端口并位于同一个项目中。(客户的要求之一是他们不希望另一台服务器配置,因为他们拥有 API 资源并且它将在同一台服务器上)

我已经配置了 OpenIddict 并将其与我们的 API 项目相结合。几乎一切正常 - API 端点受到 [Authorize] 属性的保护,并阻止访问受保护的 API 端点。但是,当 API 资源受到保护时,返回的结果不是 401 Unauthorized HTTP 状态码,而是 Auth 服务器本身的 HTML 登录页面。

这是我的 Startup.cs 文件中的相关设置代码:

不知道如何在同一个项目中同时实现这些。如前所述,除了 API 返回 HTML 登录页面而不是所需的 HTTP 状态外,这一切都“有效”

0 投票
1 回答
2247 浏览

asp.net-core - userManager.FindByName 不返回角色

我正在使用OpenIddict 进行令牌身份验证。昨天当我打电话时,userManager.FindByNameAsync(request.Username)我得到了具有角色的用户。
今天我得到了 Roles 属性 count = 0 的用户。

我尝试加载角色,await userManager.GetRolesAsync(user);并得到计数为 3 的数组。这意味着用户具有角色。

我不知道发生了什么变化,但是如何使用 FindByNameAsync 函数加载具有角色的用户?

完整代码:

0 投票
1 回答
1573 浏览

asp.net-core - 缺少刷新令牌和角色 (OpenIddict)

我的令牌缺少刷新和角色属性。我正在使用 OpenIddict。该代码直到今天仍然有效,并且仍然可以在家用计算机上使用,但不能在工作中使用。

我很确定我做错了什么,但由于我比较了 startup.cs、AuthorizationController.cs 并且它们是相同的(工作和家庭),我需要一些帮助,这可能是问题的根源。

我需要为登录的用户获取角色,因为我的 Angular2 应用程序需要知道用户可以在网页上做什么。

我发送的请求:

要求

工作回应:

工作响应

家庭回应:

家庭响应

启动代码(在家用电脑上也一样):

控制器代码(再次:在家用电脑上相同):

为了解码 id_token 我正在使用angular-jwt

0 投票
1 回答
341 浏览

asp.net-core - 更改签名密钥不会使现有令牌无效

我在我的网络应用程序中使用 OpenIddict 并且刚刚替换

我现在想确认实际上正在使用新证书,但是当我提交一个在使用旧(临时)密钥时创建的access_token时,它被毫无问题地接受。我希望它会被拒绝,因为网络应用程序正在使用不同的签名密钥!

或者,我是否误解了签名密钥的目的?

我发现这篇文章表明签名密钥不用于签署使用 ASP.Net 核心数据保护堆栈时创建的访问令牌,我相信这适合我的场景,因为我没有使用 JWT 令牌或自定义令牌格式。

在这种情况下,签名密钥用于什么和/或为什么需要它?

0 投票
1 回答
1505 浏览

security - 有没有办法在 OpenIddict 中设置不同的票证有效期?

我有一个使用 OpenIddict 进行令牌授权(访问和刷新令牌)的应用程序,总体而言,它运行良好。问题是我的用例有多种应用类型(网络和移动)使用相同的授权服务器。我想为不同的类型设置不同的到期时间(可能使用不同的令牌端点),但我无法找到一种方法来覆盖使用 SetAccessTokenLifetime 和 SetRefreshTokenLifetime 设置的值。有没有办法做到这一点?

目标是为 Web 应用程序提供更长的访问令牌长度,并让用户在过期时重定向到登录(合理的过期时间,例如几小时)。在移动端,我想使用刷新令牌让用户保持登录状态。最佳实践似乎表明,在移动端我应该有一个很短的令牌到期时间(例如几分钟)和一个很长的刷新令牌到期时间。

谢谢,杰森

0 投票
1 回答
994 浏览

asp.net-core - OpenIdConnect access_token 大小和访问声明服务器端

我试图在这里围绕几个概念展开思考,但我不希望这个问题过于宽泛——基本上我们要做的是使用角色声明作为锁定我们 API 的权限,但我发现 access_token 是变得太大。

我们在服务器端使用 OpenIddict 和 ASP.NET Identity 3。我们已经实现了默认的 AspNetRoleClaims 表来存储我们对每个角色的声明 - 将它们用作权限。

我们使用基于自定义策略的声明授权来锁定我们的 API 端点,如下所示:

基于自定义策略的授权

我发现的主要问题是包含我们声明的 access_token 变得非常大。我们正在尝试使数据库中的 ClaimType 和 Value 非常小,以使声明占用空间更小。我们有一个基本的 CRUD 类型权限方案,因此对于我们的 SPA 客户端应用程序中的每个“模块”或屏幕,有 4 个权限。我们添加到应用程序中的模块越多,access_token 中的声明就越多,并且我们的 Authorization Bearer 标头变得非常大。我担心随着应用程序的增长,这变得不是很有可扩展性。

因此,声明嵌入在 access_token 中,当我点击我的端点时,该端点被这样的自定义策略锁定......

然后我可以在 AuthorizationHandler 中访问我的 ASP.NET 身份用户和 User.Claims。

如果这是一个明显的问题,请提前抱歉 - 但我想知道 - 为了让基于自定义策略的授权工作 - 是否绝对需要声明在 id_token 或 access_token 中才能调用处理程序?

如果我从 access_token 中删除声明,那么我的 AuthorizationHandler 代码不会被命中,并且我无法访问被我的自定义策略锁定的端点。

我想知道是否可以使用自定义声明策略,但在授权处理程序中具有检查声明的实际代码,以便声明不会随每个 HTTP 请求一起传递,而是从授权 cookie 获取服务器端或从数据库。

* 更新 *

Pintpoint 使用授权处理程序的答案以及关于如何从 cookie 中删除额外角色声明的评论实现了我想要的。

万一这对其他人有帮助 - 这是覆盖 UserClaimsPrincipalFactory 并防止将角色声明写入 cookie 的代码。(我有许多角色声明,因为权限和 cookie 和请求标头变得太大)

0 投票
1 回答
991 浏览

asp.net-core - Openiddict 中使用 ARR 的 Https 要求

我正在使用 ARR 而不https卸载我们的非本地托管环境。这意味着命中 ARR 的https请求是但发送到后端服务器的请求只是http.

如果我https在 openiddict 中禁用要求,则配置返回httpurl。如果我启用它,那么请求将被拒绝,因为后端服务器将它们接收为http. 有没有办法解决?

0 投票
1 回答
2554 浏览

authentication - 使用 OpenIddict 通过外部提供者登录获取令牌

我有一个带有 ASP.NET Core 的 API,它将被本机移动应用程序(目前是 UWP、Android)使用,我正在尝试实现一种客户端可以使用用户名/密码和外部提供程序注册和登录的方式,例如谷歌和脸书。现在我正在使用openIddict并且我ExternalProviderCallback必须返回我假设当前返回 cookie 的本地令牌!(我已经从某个地方复制了大部分代码)而且似乎不是 AuthorizationCodeFlow 我认为这是正确的方法!

现在这是我的 Startup 课程

这是AccountController,它正在做外部提供者的工作:

最后是 ConnectController 将生成令牌:

这就是我发送请求的方式:

https://localhost:44380/api/Accounts/ExternalLogin/Google?returnUrl=https://localhost:44380

它成功返回到 AccountsController 中的 ExternalLoginCallback 操作,但没有 JWT 令牌像正常 PasswordGrantFlow 一样发送回用户。

如果可能的话,请在这里向我发送代码并且不要将我重定向到其他地方,因为我对服务器端完全陌生,而且我之前已经完成了我的搜索。