问题标签 [thinktecture-ident-model]
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.
openid - 为每个选定的客户处理不同的权限
我将使用IdentityServer3和Thinktecture.IdentityModel.Owin.ResourceAuthorization.WebApi为我们的新 AngularJS 应用程序实现一个新的登录系统。
一些用户将可以访问多个客户。
我试图找出在同一应用程序中为用户提供不同权限的最佳方法,具体取决于前端的选择(选定的客户)。
目前我正在考虑使用 webAPI 实现我自己的权限服务。前端使用当前用户的令牌请求所有权限,并在前端缓存映射到客户的所有权限。
这可以使用 OpenID Connect 以一种好的方式完成吗?我在想实现我自己的权限服务可能是矫枉过正,或者我可能忽略了一些使用资源流的聪明方法,或者类似的东西。
authentication - 什么会导致处理程序被忽略?
我们搬到了一个新的服务器,我的 Thinktecture IdentityModel 东西坏了。
这是一个超级简化的重现样本。这项工作从 Visual Studio 本地运行,但部署到处理程序显然未处理的服务器。
处理程序未执行。我已经设置了远程调试,这表明
- Thinktecture 程序集已加载
- Application_Start 创建并添加一个基本的身份验证处理程序
这个脚本是测试客户端
api/token
它产生一个用基本身份验证标头装饰的请求,如下所示:
此服务器使用此 401 响应
Visual Studio 2013 在处理程序中显示有效的断点,但它们没有被命中。这就是为什么我相信处理程序没有被调用。
响应指定了一个领域,但修改处理程序注册以指定realm = "assa.com.au"
不影响结果。
authentication - 如何在 Identity Server 3 中使用 Windows 身份验证?
我的目标是一个使用 Web 服务的 Angular 应用程序,应用程序/Web 服务的用户使用 Windows auth 进行身份验证。用户应该能够登录到我们 Windows 域上的机器,打开浏览器并使用 Angular 应用程序,而无需再次登录。
研究
我从https://github.com/IdentityServer/IdentityServer3.Samples/下载了所有源代码示例
我完成了最简单的 OAuth2 演练示例。没问题。
然后我打开了Web Host (Windows Auth All-In-One)示例。在注释掉导致问题的两行代码后,我可以恢复并构建项目(Clients.cs 第 313,359 行,设置“AllowAccessTokensViaBrowser=false”。可能不相关。)
当应用程序运行时,我可以在 localhost:44333 上看到IdentityServer3 登录页面。伟大的。
我还可以在 localhost:44333/windows 上看到Windows 身份验证服务元数据(一个 SAML 文档)。还有,很棒。
问题是,我不知道下一步该做什么。该文档似乎建议下一步涉及编写一个调用 Windows 身份验证服务以获取令牌的客户端:
http://github.com/IdentityServer/IdentityServer3/issues/1463
这是正确的方法吗?我无法使代码示例工作。我什至不确定我是否可以指向OAuth2Client
正确的位置。请问有人可以解释这个过程,或者给我一个工作客户的例子吗?提前感谢您的帮助:)
编辑
我一直在做一些进一步的研究。我检查了身份服务器的日志,以确保添加 WS-Federation 端点操作在配置期间完成。确实如此。
然后我创建了一个简单的控制台应用程序来调用 Windows 身份验证服务,如下所示:github.com/IdentityServer/IdentityServer3/issues/2318
导入Thinktecture.IdentityModel.Client 后,我修改了该页面上的代码以适合我的端口号等,我最终得到了这个:
我的结果对象仍然有一个NotFound的 HttpErrorStatusCode ,这让我很难过。
另一个编辑
我尝试将客户端指向身份服务器端点,如下面的 Branimir 建议的那样。所以我的代码现在是:
这也不起作用。这是身份服务器日志所说的:
所以我没有进一步前进。
asp.net-web-api - ResourceAuthorize("Read","UsersList") 不工作,ResourceAuthorizationManager
我正在使用 IdentityServer3 发布令牌并尝试使用 Thinktecture.IdentityModel.Owin.ResourceAuthorization.WebApi 来授权 Web api 的资源访问。
我正在使用下面的代码来授权控制器的操作。
ResourceAuthorizationManager 如下所示。
但是,当控制权交给 AuhtorizeUsersList 时,context.Principal 没有角色声明。我在注册用户时不存储用户声明。如何随时随地为经过身份验证的用户添加声明?
c# - dotnet core IdentityModel 不会自省令牌
我正在尝试将我的一个 API 应用程序移植到 dotnet core (v2),并且升级中最重要的部分可能是让我的身份验证正常工作。
为此,我将 Thinkteture 的 IdentityModel 包添加到我的项目中。
我的 API 的工作原理是它从调用者那里以不记名令牌的形式接收身份验证标头。然后我Introspect
使用该令牌来验证它对于当前任务是否可接受,并继续执行主要逻辑。
但是,我似乎只是在代码的初始设置中遗漏了一些绝对基本的东西,因为我根本无法启动内省。
接下来,我有一些来自我的Startup.cs
, 和一个控制器的片段。
启动.cs
项目控制器.cs
此端点 (GET api/items) 始终返回 false,并且我的 OIDC 服务器应用程序从不记录任何与其通信的尝试。在代码上设置了断点services.AddAuthentication()
,所以我知道基本的设置已经就位。
我尝试过的其他一些事情:
- 在方法上加个
Authorize
装饰(没想到这会起作用..它没有) - 使用
Authority
选项,并允许发现自省端点(我想也许我的 OIDC 服务器可能不支持发现,这导致了问题,但提供自省端点并没有任何区别)
我确信我错过了一些完全微不足道的东西,但是在花了几个小时戳、搜索和尝试各种东西之后,我意识到我一定只是忽略了它。
oauth-2.0 - AuthorizationCodeProvider: Create 永远不会被调用,我如何生成授权码?
我正在设置自己的 OAuth2 服务器。到目前为止,我已经成功实现GrantResourceOwnerCredentials
了OAuthAuthorizationServerProvider
. 现在,因为我正在为我们的业务开发应用程序,所以我想实现 OAuth2 授权代码授权。
我试图按照这里的指示https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server但在我的实施中,我没有找到了如何到达(我在 中设置的)的Create
调用。AuthorizationCodeProvider
OAuthAuthorizationServerOptions
我已经简要检查了TokenEndpointPath
使用(错误的)代码参数访问是否有效,并且在调试器中我看到我AuthorizationCodeProvider
的Receive
调用被命中。当然没有成功,因为我发送的代码是“sometestcode”而不是真实的,但是代码被命中了,这意味着我走在正确的道路上。
这是我到目前为止所拥有的:
现在,当我AuthorizeEndpointPath
用 a调用 my 时redirect_uri
,我会立即被发送到该Uri。我知道这是错误的:我应该被发送到一个单独的登录页面。稍后我将修复我的 Web API 以重定向到正确的 Uri。
我的问题的重点是:我现在正在实现登录页面,但是我不知道用户登录后如何从我的WebAPI获取授权码。(我跳过了同意部分现在并假设如果用户已登录,他们可以接受,我稍后会添加同意。)
我的流程基于此处共享的图表https://docs.apigee.com/api-platform/security/oauth/oauth-v2-policy-authorization-code-grant-type
我正在使用 Thinktecture IdentityModel 在 MVC 控制器中创建登录页面。现在我需要从我的 MVC 控制器中的 Web API 检索授权代码。之后,我可以将用户重定向回请求授权码流的原始客户端(应用程序)。
为了从我的 Web API 获取授权码,我在 Thinktecture 的 OAuth2Client 中看到了三种方法:
- CreateAuthorizeUrl
- CreateCodeFlowUrl
- RequestAuthorizationCodeAsync
似乎都没有做我想做的事。如何继续调用我的 WebAPI 来生成代码?
我想我在 Web API 端正确设置了它。我只是不知道如何击中Create
流程的一部分。我希望有人可以帮助我理解我没有看到的东西。我觉得某个地方有盲点...
如何让 OAuth2Client 从我的 WebAPI 获取授权码?
我也在使用 Postman 来测试我的 Web API。如果有人可以帮助我获取 Web API 2.0 中返回授权码的 URL,我也会接受它作为答案。然后我可以自己在MVC中编写代码。
编辑
好的,所以我想我找到了我的盲点的一部分。首先,我将“AuthorizeEndpoint”标记为“不是这个 SO 问题的重点”,但这是一个很大的错误。
当我像这样调整 AuthorizeEndpoint 时:
如果我AuthorizationCodeProvider.Create
像这样调整我的实现:
任何调用都使用查询参数/authorize
重定向到!:Dredirect_uri
code=<THE_RANDOM_GUID>
显然,这个实现不是它应该在的地方,所以我的问题还没有解决。剩下的问题:
- 现在,任何人都可以请求授权码,client_id 被忽略。
ValidateClientAuthentication
显然没有作为AuthorizeEndpoint
. 如何在 AuthorizeEndpoint 中获取 ClientId? - 授权码不耦合到客户端。任何截获代码的人都可以使用它。如何获取 ClientId
AuthorizationCodeProvider.Create
以便可以将其与代码一起存储? - 授权代码根本不与用户耦合,它是一个空的 ClaimsIdentity。如何在 AuthorizeEndpoint 之间放置一个用户登录页面,并在其中获取
ClaimsIdentity
已登录用户的登录用户?