问题标签 [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.
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):
我希望 refresh_tokens 保存在某个地方。在哪里?也许这是源头问题,为什么我的 refresh_tokens 在一些随机时间后无效(可能是重新启动 Kestrel 时)。
IIS 日志:
这是我的 Startup.cs:
更新:
最后我要做的就是:
不要忘记为 Directory:Keys 文件夹添加 IIS 权限。
asp.net-core - Openiddict 无法解析“OpenIddict.Core.IOpenIddictApplicationStore”类型的服务
我正在尝试使用身份 + jwt 授权设置 .net 核心项目,但出现以下错误:
System.InvalidOperationException:无法解析“OpenIddict.Core.IOpenIddictApplicationStore
1[OpenIddict.Models.OpenIddictApplication]' while attempting to activate 'OpenIddict.Core.OpenIddictApplicationManager
1 [OpenIddict.Models.OpenIddictApplication]”类型的服务。
这是我的配置:
当我尝试调用/api/authenticate/token
路径时出现错误。谁能帮我解决这个问题?
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-*"
asp.net-core - 如何到达openiddict授权服务器的注册页面?
我已将 opeiddict 构建为单独的 Web 应用程序作为授权服务器。我遇到了一个小问题,这就是我如何通过客户端 Web 应用程序的链接直接进入用户注册页面。现在我可以进入登录页面,作为您的示例:
有没有办法从客户端应用程序转到身份验证服务器帐户/注册?
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, Func
2 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](IInfrastructure
1 个访问器)在 Microsoft.EntityFrameworkCore.DbContext.get_QueryProvider() 在 Microsoft.EntityFrameworkCore.Internal.InternalDbSet 1.<.ctor>b__3_0()
at Microsoft.EntityFrameworkCore.Internal.LazyRef
1.get_Value() 在 Microsoft.EntityFrameworkCore.Internal.InternalDbSet1.System.Linq.IQueryable.get_Provider()
at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable
1 源,表达式`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,谢谢。
asp.net-core - 不能将 openiddict 与 Microsoft.AspNetCore.Authentication.JwtBearer 一起使用
我有 openiddict 示例工作,但我想改用 JWT。我了解到我不能将 OAuth 与 JWT 一起使用,因为它们是两个不同的东西。说得通。
但是如果我想使用 JWT,那么我需要安装一个不记名令牌中间件包。我相信,对于 .net 核心,是 Microsoft.AspNetCore.Authentication.JwtBearer
但是我不能同时用 openiddict 安装那个包。我需要使用特定版本的 JwtBearer 来使其工作吗?
我尝试安装时遇到的错误是
Openiddict 包设置
NuGet 配置
.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 应用程序。但我的理解是这仍然应该在邮递员中工作?
这是我点击授权路由时的服务器输出
openiddict - 将隐式流与 OpenIdDict 一起使用,而无需在授权服务器上具有登录/注册视图
我想要做的是以下几点:
与 dotnet Core Wep API 通信的 SPA。我想使用社交登录。
我想使用(服务器端)授权代码流。
我倾向于使用 OpenIdDict 来处理 JWT 令牌身份验证。
我设置了 OpenIdDict 的示例项目,特别是 ImplicitFlow 并且我得到了它的工作。但是此示例使用重定向到授权服务器进行实际登录过程。
是否可以让 SPA 也提供这些页面?
似乎这已经完成了,请参阅:https ://github.com/Kukks/openiddict-custom-grants-example
但是我再也无法获得构建概念的证明了。
我想知道的是,Kukks 的概念证明是否仍然是实现这一点的方法,以及我是否以这种方式做正确的事情。还是我在这里打开了一罐蠕虫,我应该只从授权服务器加载一个页面并停止抱怨吗?
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 令牌身份验证/授权的最佳实践。
c# - 在 OpenIddict 中处理请求时发生未处理的异常
因此,我正在尝试使用 OpenIddict 实现版本1.0.0-beta2-0580
,NET 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
然后我有以下堆栈跟踪:
在启动时我有:
然后在配置中我有这个:
然后授权控制器看起来像这样:
依赖项: