问题标签 [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.
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 等……奇怪……对吧?
其他一些信息:
- ASP.NET 核心 SDK 1.1
- 项目.json:https ://gist.github.com/trinvh/47f29468887c209716098bc4c76181a7
- Startup.cs:https ://gist.github.com/trinvh/75b7a12fbee754d0ea8cf251f2da9fe9
- AuthorizationController.cs:https ://gist.github.com/trinvh/089015b2573cae550856631e72b81374
任何帮助将不胜感激!
c# - .net 核心 - Jwt 中间件身份验证签名密钥被忽略
我正在使用配置为使用 json Web 令牌的 openiddict:
我已通过 JWT 中间件按以下方式配置:
如您所见,颁发者签名密钥设置为对称密钥:
但是创建的 jwt access_tokens 已将alg
声明设置为RS256
,因此似乎此设置被忽略了,并且 openiddict 使用 RSA 私钥对生成的令牌进行签名
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 状态外,这一切都“有效”
asp.net-core - userManager.FindByName 不返回角色
我正在使用OpenIddict 进行令牌身份验证。昨天当我打电话时,userManager.FindByNameAsync(request.Username)
我得到了具有角色的用户。
今天我得到了 Roles 属性 count = 0 的用户。
我尝试加载角色,await userManager.GetRolesAsync(user);
并得到计数为 3 的数组。这意味着用户具有角色。
我不知道发生了什么变化,但是如何使用 FindByNameAsync 函数加载具有角色的用户?
完整代码:
asp.net-core - 缺少刷新令牌和角色 (OpenIddict)
我的令牌缺少刷新和角色属性。我正在使用 OpenIddict。该代码直到今天仍然有效,并且仍然可以在家用计算机上使用,但不能在工作中使用。
我很确定我做错了什么,但由于我比较了 startup.cs、AuthorizationController.cs 并且它们是相同的(工作和家庭),我需要一些帮助,这可能是问题的根源。
我需要为登录的用户获取角色,因为我的 Angular2 应用程序需要知道用户可以在网页上做什么。
我发送的请求:
工作回应:
家庭回应:
启动代码(在家用电脑上也一样):
控制器代码(再次:在家用电脑上相同):
为了解码 id_token 我正在使用angular-jwt:
asp.net-core - 更改签名密钥不会使现有令牌无效
我在我的网络应用程序中使用 OpenIddict 并且刚刚替换
和
我现在想确认实际上正在使用新证书,但是当我提交一个在使用旧(临时)密钥时创建的access_token时,它被毫无问题地接受。我希望它会被拒绝,因为网络应用程序正在使用不同的签名密钥!
或者,我是否误解了签名密钥的目的?
我发现这篇文章表明签名密钥不用于签署使用 ASP.Net 核心数据保护堆栈时创建的访问令牌,我相信这适合我的场景,因为我没有使用 JWT 令牌或自定义令牌格式。
在这种情况下,签名密钥用于什么和/或为什么需要它?
security - 有没有办法在 OpenIddict 中设置不同的票证有效期?
我有一个使用 OpenIddict 进行令牌授权(访问和刷新令牌)的应用程序,总体而言,它运行良好。问题是我的用例有多种应用类型(网络和移动)使用相同的授权服务器。我想为不同的类型设置不同的到期时间(可能使用不同的令牌端点),但我无法找到一种方法来覆盖使用 SetAccessTokenLifetime 和 SetRefreshTokenLifetime 设置的值。有没有办法做到这一点?
目标是为 Web 应用程序提供更长的访问令牌长度,并让用户在过期时重定向到登录(合理的过期时间,例如几小时)。在移动端,我想使用刷新令牌让用户保持登录状态。最佳实践似乎表明,在移动端我应该有一个很短的令牌到期时间(例如几分钟)和一个很长的刷新令牌到期时间。
谢谢,杰森
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 和请求标头变得太大)
asp.net-core - Openiddict 中使用 ARR 的 Https 要求
我正在使用 ARR 而不https
卸载我们的非本地托管环境。这意味着命中 ARR 的https
请求是但发送到后端服务器的请求只是http
.
如果我https
在 openiddict 中禁用要求,则配置返回http
url。如果我启用它,那么请求将被拒绝,因为后端服务器将它们接收为http
. 有没有办法解决?
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 一样发送回用户。
如果可能的话,请在这里向我发送代码并且不要将我重定向到其他地方,因为我对服务器端完全陌生,而且我之前已经完成了我的搜索。