问题标签 [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 回答
1336 浏览

openiddict - Asp.NET Core OpenIddict invalid_grant

首先第一件事:我知道这是一个大帖子,但我跟踪这个问题几个星期,我收集了很多信息,可能是问题的根源。

我正在使用带有 OpenIddict 身份验证的 Angular2 应用程序。我在客户端应用程序上获得 access_token、refresh_token。我可以使用 refresh_token 来获取新的 access_token,一切正常。几乎。

在某些时候,我从服务器收到错误响应:

POST https://mydomain:2000/api/authorization/token 400(错误请求)

和回应:

我对所有内容进行了三次检查,我发送的 refresh_token 是正确的。

关于设计:
在我向服务器发出请求之前,我检查 access_token 是否过期。如果过期,我发送请求以使用 refresh_token 获取新的 access_token。

它适用于随机时间,但在某些随机时间(重复) refresh_token 变得无效。
我虽然它与 . 有关系AddEphemeralSigningKey,但我将其更改为AddSigningCertificate. (详细信息在这个线程中。)

我认为,IIS 在一段时间不活动后会杀死 Kestrel。我的应用程序池配置是:

我怀疑在发出新请求后,OpenIddict 错误地解密了 refresh_token,因为 Kestrel 已重新启动?还是我错了?

我还检查了 OpenIddict 表和 OpenIddictApplications,OpenIddictAuthorizations 和 OpenIddictScopes 都是空的。只有 OpenIddictTokens 包含一些数据(并且都是类型 refresh_token):

OpenIddictTokens

我希望 refresh_tokens 保存在某个地方。在哪里?也许这是源头问题,为什么我的 refresh_tokens 在一些随机时间后无效(可能是重新启动 Kestrel 时)。

IIS 日志:

这是我的 Startup.cs:

控制台截图: 获取 refresh_token 发送 refresh_token

更新:
最后我要做的就是:

不要忘记为 Directory:Keys 文件夹添加 IIS 权限。

0 投票
1 回答
716 浏览

asp.net-core - Openiddict 无法解析“OpenIddict.Core.IOpenIddictApplicationStore”类型的服务

我正在尝试使用身份 + jwt 授权设置 .net 核心项目,但出现以下错误:

System.InvalidOperationException:无法解析“OpenIddict.Core.IOpenIddictApplicationStore 1[OpenIddict.Models.OpenIddictApplication]' while attempting to activate 'OpenIddict.Core.OpenIddictApplicationManager1 [OpenIddict.Models.OpenIddictApplication]”类型的服务。

这是我的配置:

当我尝试调用/api/authenticate/token路径时出现错误。谁能帮我解决这个问题?

0 投票
1 回答
1381 浏览

asp.net-core - ASP.NET Core Web API 和 OpenIddict

我正在尝试使用OpenIddict我的asp.net core web api项目。我已按照此处编写的说明进行操作,但是当我尝试构建项目时,出现以下错误

无法为“.NETCoreApp,Version=v1.1”解析“OpenIddict.Mvc (>= 1.0.0)”。

我已经通过 Visual Studio 2017 创建了项目(我想我默认安装了最新的 .NET Core 工具)。有任何想法吗?

更新: 说明的第一步说您必须更新您的包以引用 ASP.NET Core RTM 包。那是什么意思?

还有我的 .csproj 文件

我也试过Version="1.0.0-*"

0 投票
1 回答
605 浏览

asp.net-core - 如何到达openiddict授权服务器的注册页面?

我已将 opeiddict 构建为单独的 Web 应用程序作为授权服务器。我遇到了一个小问题,这就是我如何通过客户端 Web 应用程序的链接直接进入用户注册页面。现在我可以进入登录页面,作为您的示例:

有没有办法从客户端应用程序转到身份验证服务器帐户/注册?

0 投票
1 回答
1350 浏览

c# - 无法在模式“”中为实体“OpenIddictApplication”使用表“OpenIddictApplications”,因为它正在用于另一个实体

我正在尝试使用 OpenIddict 从 asp.net 核心应用程序获取令牌。

当我从我的端点请求一个令牌时,我得到了这个异常:

System.InvalidOperationException:无法在架构“”中为实体“OpenIddictApplication”使用表“OpenIddictApplications”,因为它正在用于另一个实体。在 Microsoft.EntityFrameworkCore.Internal.ModelValidator.ShowError(String message) 在 Microsoft.EntityFrameworkCore.Internal.RelationalModelValidator.EnsureDistinctTableNames(IModel model) 在 Microsoft.EntityFrameworkCore.Internal.RelationalModelValidator.Validate(IModel model) 在 Microsoft.EntityFrameworkCore.Infrastructure.ModelSource .CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator) at System.Collections.Concurrent.ConcurrentDictionary 2.GetOrAdd(TKey key, Func2 valueFactory) 在 Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel() 在 Microsoft.EntityFrameworkCore.Internal。1.get_Value() at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServiceCollectionExtensions.<>c.<AddQuery>b__1_3(IServiceProvider p) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider) at Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService[TService](IInfrastructure1 个访问器)在 Microsoft.EntityFrameworkCore.DbContext.get_QueryProvider() 在 Microsoft.EntityFrameworkCore.Internal.InternalDbSet 1.<.ctor>b__3_0() at Microsoft.EntityFrameworkCore.Internal.LazyRef1.get_Value() 在 Microsoft.EntityFrameworkCore.Internal.InternalDbSet1.System.Linq.IQueryable.get_Provider() at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable1 源,表达式`1 谓词)在 C:\Users\Enrique_Garcia\Desktop\OpenID\OpenID\Controllers\AuthorizeController.cs:line 35 中的 OpenID.Controllers.AuthorizeController.d__2.MoveNext() --- 堆栈跟踪结束以前抛出异常的位置 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__27.MoveNext( ) --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.AspNetCore.Mvc 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() .Internal.ControllerActionInvoker.d__25。MoveNext() --- 从先前引发异常的位置结束堆栈跟踪 --- 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context) 的 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context) 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() .AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__22.MoveNext() --- 堆栈跟踪从上一个位置结束抛出异常---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() ....Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__22.MoveNext() 的 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) 的 Rethrow(ActionExecutedContext context) --- End从先前抛出异常的位置的堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() ....Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__22.MoveNext() 的 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) 的 Rethrow(ActionExecutedContext context) --- End从先前抛出异常的位置的堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() ....

已经看到了,但我没有使用 Asp.Net Identity

配置服务:

配置:

先谢谢了。

这是我的 UniverContext 类:

我的 csproj 文件包含的是:

软件包 openiddict 版本是 1.0.0-beta2-0607

我正在尝试并且有效的是这是我的 AuthorizationController:

但是在 Startup 类中注册我的 DbContext 后,我​​正在尝试使用数据库用户的类似内容:

在这一行中,我得到了描述的错误。

如果您想查看我的 AuthorizationController,我创建了一个repo,谢谢。

0 投票
1 回答
865 浏览

asp.net-core - 不能将 openiddict 与 Microsoft.AspNetCore.Authentication.JwtBearer 一起使用

我有 openiddict 示例工作,但我想改用 JWT。我了解到我不能将 OAuth 与 JWT 一起使用,因为它们是两个不同的东西。说得通。

但是如果我想使用 JWT,那么我需要安装一个不记名令牌中间件包。我相信,对于 .net 核心,是 Microsoft.AspNetCore.Authentication.JwtBearer

但是我不能同时用 openiddict 安装那个包。我需要使用特定版本的 JwtBearer 来使其工作吗?

我尝试安装时遇到的错误是

Openiddict 包设置

NuGet 配置

0 投票
1 回答
1308 浏览

.net-core - 获取令牌后无法使用 jwt 访问授权路由

我可以登录并获得 jwt

但是当我尝试获得受保护的路线时,我得到了 401。

这是我的startup.cs

我尝试为各种不同的事物设置权威和受众。我已经尝试完全删除它们,但我无法在一条路线上获得 200

[授权]

补充说。

当我尝试在 Postman 中执行此操作时,出现错误

Bearer error="invalid_token", error_description="签名无效"

这是一个带有 1 个标头的 GET,Authorization = Bearer {token here} 我很茫然。现在已经在这里待了3天。我觉得这几乎是正确的,我只是错过了一些关键的东西。缺少标题或其他内容。

另请注意,我在 localhost:4200 有一个 Angular 2 应用程序。但我的理解是这仍然应该在邮递员中工作?

这是我点击授权路由时的服务器输出

0 投票
1 回答
736 浏览

openiddict - 将隐式流与 OpenIdDict 一起使用,而无需在授权服务器上具有登录/注册视图

我想要做的是以下几点:

与 dotnet Core Wep API 通信的 SPA。我想使用社交登录。

我想使用(服务器端)授权代码流。

我倾向于使用 OpenIdDict 来处理 JWT 令牌身份验证。

我设置了 OpenIdDict 的示例项目,特别是 ImplicitFlow 并且我得到了它的工作。但是此示例使用重定向到授权服务器进行实际登录过程。

是否可以让 SPA 也提供这些页面?

似乎这已经完成了,请参阅:https ://github.com/Kukks/openiddict-custom-grants-example

但是我再也无法获得构建概念的证明了。

我想知道的是,Kukks 的概念证明是否仍然是实现这一点的方法,以及我是否以这种方式做正确的事情。还是我在这里打开了一罐蠕虫,我应该只从授权服务器加载一个页面并停止抱怨吗?

0 投票
1 回答
558 浏览

asp.net-core - ASP.NET Core 权限

我迷失在所有可以管理用户可以做什么和不能做什么的选项中。我从角色开始:[Authorize(Roles = Constants.Roles.ModeratorAndUp)]. 其中 ModeratorAndUp 是 string "Moderators, Administrators"
但我需要更灵活的方法。在过去的 3 个小时里,我正在阅读有关索赔和许可的信息。我还发现了这篇有趣的博客文章

我将 Angular 和 ASP.NET Core 与通用模板一起使用。对于身份验证,我使用OpenIddict我跟着一本书。

我想使用 JWT 令牌进行授权和身份验证。我不知道在 .NET Core 中应该如何处理权限,但我有 100 个不同的角色,而且完全一团糟。而且当我创建新用户时,我需要手动添加大约 20 个角色。如果我可以创建具有角色/权限的组,然后将用户添加到该组,那就太好了。但是不知道这个设计将如何与 OpenIdDict 和 JWT 令牌授权一起使用。

有人可以指出我正确的方向,然后我会自己研究。
我不确定我是否应该构建一些系统来在我更改组权限/角色时自动更新用户角色,我是否应该使用声明......我想使用[Authorize]属性,因为它确实简化了事情。

什么/如何/哪个是在 ASP.NET Core 中进行 JWT 令牌身份验证/授权的最佳实践。

0 投票
2 回答
51123 浏览

c# - 在 OpenIddict 中处理请求时发生未处理的异常

因此,我正在尝试使用 OpenIddict 实现版本1.0.0-beta2-0580NET core 1.1但出现以下错误:

An unhandled exception occurred while processing the request

这是基于此:https ://github.com/openiddict/openiddict-core/tree/dev/samples

连接休息呼叫

db 正确注册数据库,加载设置,一切正常。数据库中的表:__efmigrationshistory, aspnetroleclaims, aspnetroles, aspnetuserclaims, aspnetuserlogins, aspnetuserroles, aspnetusers, aspnetusertokens, basetransaction, openiddictapplications, openiddictauthorizations, openiddictscopes,openiddicttokens

然后我有以下堆栈跟踪:

在启动时我有:

然后在配置中我有这个:

然后授权控制器看起来像这样:

依赖项: