问题标签 [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 - .NET Core WebAPI + OpenIdDict(凭据流)和 Angular2 客户端:成功登录后 401(完整重现)
我正在尝试创建一个 Angular2 SPA,它使用一个使用 OpenIdDict 保护的 .NET Core Web API,并带有凭据流。在为这个问题创建一个重现解决方案时,我还在自述文件中详细说明了我的所有步骤,所以希望这篇文章对像我这样的新手有用。请在这些存储库中找到完整的复制解决方案:
服务器端(.NET Core + OpenIdDict),详细说明构建您自己的:https ://github.com/Myrmex/repro-oidang
客户端(Angular2):https ://github.com/Myrmex/repro-angoid
至于服务器端,我按照 OpenIdDict 提供的有关此流程的示例(https://github.com/openiddict/openiddict-samples/blob/master/samples/PasswordFlow)。以下是 中最相关的位Startup
:
如果我使用 Fiddler 对其进行测试,它可以正常工作:令牌请求获取令牌,然后我可以将其包含在Authorization
标头中以访问任何受保护的 API,该 API 按预期返回 JSON 数据。
示例令牌请求:
示例资源请求:
然而,在客户端,每当我尝试相同的请求时,我都会收到 401 错误;查看日志,似乎 Angular2 Http 服务根本没有发送所需的标头,因为我收到了错误Authentication was skipped because no bearer token was received
(请参阅下面的更多日志条目)。
检索一些资源的服务是这样的:
助手createAuthHeaders
只是获取一些代表Header
(https://angular.io/docs/ts/latest/api/http/index/Headers-class.html)条目的属性,检索存储的令牌,将Authentication
条目附加到标题,并返回它:
然而,这个请求得到一个 401 响应,然后 Angular 在尝试将响应映射到 JSON 对象(Unexpected end of JSON input
)时抛出异常。
我必须补充一点,一旦客户端获得令牌,它就会向它发出另一个请求,以检索用户信息,这很好;就是这样(见后面的代码get user info
):
然而,使用上述服务构建的任何其他请求都会失败。使用引用函数构建的标头有什么问题?
以下是服务器端的一些日志条目:
asp.net-web-api - SignalR 和 OpenId 连接
我有一个使用ASP.NET Core Web Api
和OpenIddict
作为授权框架的服务器。现在我已经添加了一个SignalR
主机并想要为其添加授权。
从不同的来源我发现SignalR
(JS 客户端)希望您在查询字符串中或通过 cookie 发送访问令牌,因为 websockets 不支持标头。
由于身份验证中间件不检查查询字符串或 cookie 容器中的授权条目,因此我需要实现这样的提供程序/检索器/解析器,它自己读取此值。
我找到了解决方案,IdentityServer
但没有关于OpenIddict
.
我在哪里/如何实现这样的令牌解析器OpenIddict
?
asp.net-core - asp.net core / openiddict & client spa 具有自定义权限的授权
我需要一些帮助来理解基于令牌的身份验证的一两件事。我的设置是一个后端 asp.net 核心应用程序,带有用于令牌身份验证的 openiddict。到目前为止一切正常 - 我现在需要添加用户权限。我会有很多(例如用户可以查看 xy,用户可以编辑 xy,用户可以删除 xy,具有许多不同的 xy 组件)。到目前为止,后端运行良好,我现在的问题是:如何通过令牌获取这些权限到我的客户端应用程序..
- 据我了解,这些不是经典的“声明”,因为声明会描述“你是谁”,而是“你被允许做什么”。正确的?
但是如何将它们打包到我的 id_token/ 我如何将它们添加到我的有效负载中?
第二件事:我需要在我的情况下验证令牌(签名)吗?每个 Api 请求都在服务器端进行验证,所以基本上我不需要关心我的客户端权限是否经过调整,对吧?(因为它们仅用于 UI 显示目的)
谢谢你的帮助!
asp.net - 使用 Angular 和 MVC Core 进行 JWT 身份验证/授权
我正在开发一个使用 ASP.NET MVC 核心作为后端 API 的 Angular SPA,我在让我的 JWT 身份验证正常工作时遇到了很多麻烦。
我使用 Openiddict 作为我的 JWT 中间件来发行令牌。我可以成功地向我的控制器发送令牌请求,让用户登录,然后将令牌发送回客户端。
但是,当我尝试访问受保护的 API 路由时,我收到了 401 未经授权的消息。我可以看到令牌是在请求的标头中发送的,所以它一定不能在服务器端正确读取,所以我认为这只是一个配置问题。我为此查看的每一个资源都让人觉得没有其他明智的配置可做。
以下是代码的相关部分:
启动配置服务
启动配置应用程序
控制器- 我从网上的一个例子中得到这个
我将省略 angular http 拦截器,因为路由通过应用程序和 Postman 都失败了。就配置 MVC 以正确处理这些令牌而言,我有什么遗漏吗?
c# - 一个应用程序中的身份服务器和客户端 - 通过令牌授权不起作用
我正在创建 Web 应用程序,包括 API 和 OAuth 授权代码流用户授权。所以我有AccountController
还有我的Startup
班级配置
所以我可以登录并获取访问令牌,但是当我使用令牌对具有[Authorize]
属性的控制器进行 API 调用时,它不会将我识别为授权用户。我还注意到表中记录的ApplicationId
值为空。怎么了?AuthorizationId
OpenIddictTokens
c# - 找不到类型或命名空间名称“OpenIddictDbContext<,,>”
我有个问题。我今天早上打开我的项目并收到错误:
找不到类型或命名空间名称“OpenIddictDbContext<,,>”(您是否缺少 using 指令或程序集引用?) [netcoreapp1.1]
当我恢复和构建我的项目时发生了这个错误。这很奇怪,因为我的 project.json 文件中确实有"OpenIddict": "1.0.0-*",并且我正在使用参考:using OpenIddict ;
这个问题在我的项目中到处都会引起问题,因为他似乎不认识“使用 OpenIddict”
如果有帮助,这是我收到错误的示例(ApplicationDbContext.cs)
或者
这是我的project.json:
这很奇怪,因为我在可视化代码中打开的每个项目都有这个错误,所以我认为这与我的项目无关。
c# - 丰富的 Twitter 数字/Google Auth 与 OpenIdDictServer
我们的应用程序需要通过手机号码或谷歌登录。我们正计划通过 Twitter Digits 进行手机号码认证。
据我了解,注册和认证流程如下:
移动应用程序使用 Twitter Digits 或 Google 登录进行丰富的身份验证(用户执行丰富的身份验证而不是打开 Web 浏览器选项卡会带来更好的用户体验)。Twitter Digits / Google 登录返回身份令牌。
移动应用程序调用 AuthServer 来登录并提供身份令牌。
身份服务器使用 Digits 服务或 Google Auth 服务验证提供的身份令牌。
验证后,AuthServer 将尝试查找用户,如果不存在,它将创建一个。
AuthServer 将访问令牌返回给移动应用程序。
现在,我正在寻找实施步骤#3-4 的选项。
目前,我所做的是修改令牌端点代码,将用户名作为电话号码或电子邮件地址和密码作为 Google/Twitter Digits ID 令牌发送。现在,由于身份验证服务器需要知道发送的密码实际上是一个需要通过第三方服务验证的令牌,因此我通过在 TokenHint 中发送服务名称“Digits”或“Google”来解决它。
这很好用,但我想知道支持我想要实现的目标的最干净的方法是什么。
asp.net-web-api - Openiddict 多个刷新令牌
如何在 Asp.net 核心中为 openiddict 创建自定义提供程序以允许多个刷新令牌?这样,如果用户从他们的计算机登录,然后回家并在他们的手机上登录,他们就不必每次登录不同的设备时都登录。app.UseOAuthValidation() 在调用授权控制器之前在后台运行,因此没有句柄来验证是否有超过 1 个刷新令牌匹配。另一个问题是我正在使用这个:
所以我无法通过 DbContext 访问 openiddict 表来手动执行此操作。
启动.cs
并授权控制器
asp.net-core - Angular 和 Ionic 客户端的 OpenIdDict 隐式流
我们一直在使用 OpenIdDict 和密码流。
但是:我们想要切换到隐式流(来自 openiddict 身份验证服务器的弹出窗口)。我可以找到一个 ASP.NET 应用程序的示例,但我们想在以下情况下使用它: 1/ Angular 1.0 网站 2/ Ionic 2.0 应用程序
有人可以给出一些提示吗?(Aurelia 的例子很接近,但我们无法让它在 Ionic 或 Angular 中工作)。我们可以使用哪些库,我们应该进行哪些调用?
非常感谢,
entity-framework - ASP.NET 核心标识错误:实体类型“AppUserLogin”是使用单个键属性定义的,但有 2 个值被传递给“DbSet.Find”方法
我覆盖身份类:
我想为谷歌使用外部登录,但是当我打电话时await UserManager.FindByLoginAsync(info.LoginProvider, info.ProviderKey);
出现错误:
实体类型“AppUserLogin”是使用单个键属性定义的,但有 2 个值被传递给“DbSet.Find”方法。
我正在关注教程openiddict和ASP.NET Core 和 Angular 2,但我很确定这个错误与这 2 个教程没有任何关系。我认为我的代码不起作用,因为我更改了 UserLogins 表的 TKey: public partial class AppUserLogin : IdentityUserLogin<int>
。即使搜索是用单个键属性定义的,也不会产生任何结果。