问题标签 [identityserver3]
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.
facebook - Thinktecture IdentityServer3 Facebook登录按钮问题
我在我的项目中使用“IdentityServer3 - IdentityManager - MembershipReboot”进行用户管理、身份验证和资源授权。
我从下面的示例开始,并在创建用户、通过/connect/token api 对他们进行身份验证和授权资源方面做得很好。 https://github.com/thinktecture/Thinktecture.IdentityServer.v3.Samples/tree/master/source/MembershipReboot
我的解决方案的简要架构是
MySql 作为数据库。通过 MembershipReboot.EF 与 MembershipReboot 通信。
客户端项目使用 html + angularjs 开发。
资源 API 是使用 Nancy 开发的,并在一个单独的项目中托管在 Owin+Katana 上。
身份验证服务(IdSvr+IdMgr+MR)托管在一个单独的项目中。
现在我想创建一个简单的按钮/链接,点击它可以让我登录 Facebook。此按钮的功能应与 IDSvr 默认登录页面(https://localhost:44333/core/login?signin=4f909a877cc465afd26d72f60ec08f51)“Facebook 按钮”中定义的功能相同。
我已经尝试了很多谷歌搜索,但没有一个案例与我的场景相匹配。我什至尝试复制默认 IdSvr facebook 登录的请求-响应行为,但这不起作用,因为 cookie 没有保存在最终客户端上。
我还尝试点击“ https://localhost:44333/core/signin-facebook ”并从服务器获取响应为HTTP/1.1 500 Internal Server Error。所以我认为我在 IdSrv 项目中设置 facebook 选项时可能是错误的。
因此,如果有人可以只为我提供一个 IdSvr API 来连接或告诉我如何配置 Id Svr,以便映射 url 可以将其重定向到 facebook 登录。或者可以告诉我在 IdSrv 中设置 facebook 身份验证选项的错误在哪里。
c# - 注册 IdentityServer3 后自动登录本地用户
使用IdentityServer3在用户完成注册过程后,我需要自动登录并将本地用户重定向回客户端应用程序。有没有一种优雅的方式来做到这一点?从我的挖掘中我怀疑不是,在这种情况下,我可以使用黑客来实现这一目标吗?
我能够使用自定义User Service为外部用户实现这一点,但这使用了部分登录。但是,对于本地用户来说,在他们使用用户名和密码登录之前,他们并不在用户服务处理的身份验证过程中。
另请注意,我无权访问用户密码,因为注册过程包含多个屏幕/视图,因为在这种情况下,作为注册过程的一部分,他们需要验证其电子邮件。
进步:
我找到了这个https://github.com/IdentityServer/IdentityServer3/issues/563但还没有弄清楚如何触发重定向。
我正在尝试使用以下方式发出身份验证令牌:
但到目前为止我能做的最好的是将用户重定向回登录屏幕:
javascript - 通过 Ajax 请求时完成 OpenIDConnect 身份验证
正常的 OpenIDConnect 服务器的工作方式如下:
- 你去
a.com/secure-resource
- 你得到
302
服务器的回复 - 您的浏览器会处理它并将您发送到身份服务器
- 你在那里登录
- 它
a.com
通过POST
- 您登录
a.com
并a.com/secure-resource
返回浏览器。
但是我有一个我正在尝试解决的场景,但我需要你的帮助。
- 用户已经在 idServer 上登录
- 用户已登录
a.com
- 用户未登录
b.com
- 我们需要向 Web 服务器发送一个 ajax 调用
b.com
(来自另一个域a.com
) b.com
配置为使用 OpenIDConnect。- 但是因为请求
b.com
是通过Ajax,所以用户不能正常重定向到idServer。(我们得到的回应只是一个302
)
我们可以继续通过 Ajax 处理 302(我仍然不确定这是否可行,安全方面)。
但
IdentityServer/OpenIDConnect 中是否有针对这些情况设计的方案?
asp.net-web-api - 从 OpenID 服务器接收到的令牌的转换
我目前有一个分布式系统,其中包含充当 SSO 服务器的 OpenID Connect 服务器 (IdentityServer3)。使用 SSO 服务器的客户端是带有 WebAPI v2 后端的 AngularJS SPA:s。
我得到了基本的登录流程,但我需要一些帮助来配置 WebAPI/OWIN 管道以允许转换收到的令牌声明,即。删除不必要的声明并添加本地声明。我假设我需要创建一个本地 JWT,而不是使用从 SSO 服务器接收到的 JWT。
问题是,这样做的最佳方法是什么?是否有可以帮助解决此问题的 OWIN 中间件,或者我是否需要从 SSO 服务器收到的声明中“手动”生成新的本地签名 JWT?
当前实施细节:
- AngularJS SPA 使用授权代码流对 SSO 服务器进行身份验证并接收授权代码。
- SPA 将授权代码发布到 WebAPI。
- WebAPI 使用 OAuth2Client 类(Thinktecture.IdentityModel.Clients 的一部分)接收授权代码并从 SSO 服务器请求 AccessToken/JWT。此 AccessToken 将返回给 SPA,以用于对 WebAPI 进行的任何进一步请求。
所以我的问题主要与第 3 步有关。如何最好地更改我的当前流程以生成一个也包含本地声明的令牌?
此外,您建议的解决方案(JwtBearerAuthentication、OpenIdConnectAuthentication 或 OAuthBearerAuthentication)应该使用哪种身份验证中间件?
为我可能混淆的术语使用道歉,我是 OAuth 的初学者,尤其是 OWIN 管道。:)
wcf - 如何将 JWT 令牌与 WCF 和 WIF 一起使用?
一般注意事项
我们正在使用IdentityServer3并且到目前为止对它非常满意。
在 MS 和 Thinktecture OWIN 中间件的帮助下,我们可以非常轻松地保护 MVC 和 ASP.NET Web API 应用程序。
我们为之工作的客户端仍然有很多 SOAP WCF 服务,而这正是我们遇到的问题。
设置
我不会撒谎,我对 WCF 的经验还很遥远,我只将它用于非常基本的场景 - 了解 basicHttpBinding,没有传输或消息安全性。
这就是我想要实现的目标:
- 客户端从 IdentityServer 获取 JWT 访问令牌
- 不知何故,令牌最终出现在 SOAP 消息头中
- WCF 读取并验证令牌
- WCF 检查声明并根据某些标准执行授权
我无法让第三步工作。
服务器设置
- 我正在使用
ws2007FederationHttpBinding
安全TransportWithMessageCredential
模式。消息包含 aBearerKey
并且令牌的类型为urn:ietf:params:oauth:token-type:jwt
- 该服务使用 WIF 身份管道,我在其中添加了
JwtSecurityTokenHandler
来自System.IdentityModel.Tokens.Jwt
NuGet 包的
客户端设置
- STS 发出的 JWT 令牌被包装在一个
BinarySecurityToken
XML 元素中,该元素本身被包装在一个GenericXmlSecurityElement
- 此标记用作的
CreateChannelWithIssuedToken
参数ChannelFactory
怎么了
该令牌在 SOAP 标头中找到并传递给JwtSecurityTokenHandler
.
但随后抛出异常:
JustDecompile 之后,在进一步读取 SOAP 标头中的 XML 元素时,似乎出现了错误。奇怪的是令牌是最后一个元素。这是整个消息的样子:
看起来没有什么畸形或任何东西。从堆栈跟踪来看,在读取结束元素时必须抛出异常,</o:Security>
因为令牌已正确读取和处理。
复制品
我分叉了示例存储库,因此如果您愿意,可以查看一下。以下是相关项目:
SelfHost (Minimal)
在sources
文件夹中。这是 STS- 在
Clients
解决方案中,WCF 服务位于APIs
文件夹中 - 在
Clients
解决方案中,WCF 客户端是Console Client Credentials With Wcf
项目
启动它的最佳方法是先启动 STS,然后Right click -> Debug -> Start new instance
在 WCF 服务上,然后在 WCF 客户端上同样如此。
提前致谢!
openid - Thinktecture“insufficient_scope”错误。单一范围声明与范围列表
我敢肯定答案是显而易见的,但目前它正在躲避我。
当我的代码尝试调用 /connect/userinfo 并且消息为“insufficient_scope”时,我收到 403。
上面是检查 JWT 中的范围声明并希望找到“openid”的值以使 /connect/userinfo 端点工作的代码行。
在我的 JWT 中,如果它有类似的东西:
...然后端点很好。相反,如果我有:
...然后它失败了。
我应该永远没有范围声明的列表/数组吗?也许我在某处缺少配置设置?
用代码更新
对不起。当然,代码会使问题更清楚。
客户商店
范围存储
启动.cs
登录.html
更新#2
射击,这是 Mono 与 Windows 的对比。在 Windows 中工作正常,在 Mono 中坏了。显然已知问题:https ://github.com/IdentityServer/IdentityServer3/issues/1373#issuecomment-104756822
authentication - 替代IdentityServer3登录系统
在我上一个问题中的@leastprivilege 回答之后,我得出结论,这两种解决方案都不是可能的:
- 登录服务不支持 REST 身份验证(因此,无法使用
IUserService.AuthenticateLocalAsync
并仅连接到它) - 我不需要它是一个额外的提供者,我需要它来替代 IS3 之一,即,我需要 /login 页面是来自不同服务的页面,而不是显示本地登录 + 额外的提供者。
这可以定制还是我需要更改 IdentityService3 源?如果是这样,为了实现身份验证而不破坏授权,我需要确保明智地执行什么?
更新
按照这个答案,解决方案可能是创建一个新的提供程序并使用在某处设置自动重定向acr_values
identityserver3 - 如何使用 IdentityServer3 通过 javascript 传递我的访问令牌?
我有一个带有大量 javascript 调用的 Asp.Net MVC 应用程序。我保护了一个 MVC 操作,被重定向到身份服务器,登录,然后被重定向回客户端。我可以通过 MVC 进行后续调用,但是如何获取该访问令牌并在 ajax 调用中使用它?
这是我的 Startup.cs 文件:
这是一个示例 ajax 调用:
identityserver3 - 使用 IdentityServer v3 重新启动成员资格
我在从 MembershipReboot 和 Thinktecture IdentityServer 中提取 UserAccount 属性时遇到问题。我在这里使用示例存储库启动并运行:https ://github.com/identityserver/IdentityServer3.MembershipReboot
当我在隐式授予流程中请求“openid 配置文件”范围时,我缺少 id_token 中的许多用户帐户字段,例如“given_name、middle_name”等以及来自 userinfo 端点的响应。我理解这是因为它们需要在 GetClaimsFromAccount 函数中进行分配。
我可以看到 requestedClaims 进入了 MembershipRebootUserService 类中的 GetProfileDataAsync() 函数,如果我将鼠标悬停在 GetClaimsFromAccount 中的 TAccount 实例上,我可以看到出现在 CustomUser 动态代理中的 Firstname、Lastname 等属性,但我不能我的生活如何访问它们并将它们复制到索赔集合中?
更多信息:
我怀疑问题出在这一行:
看起来这应该将用户帐户属性转换为声明,但我没有得到任何回报。
c# - 使用 Asp.Net MVC 应用程序设置 IdentityServer
我提前道歉,因为我几乎不了解一般的安全性,特别是 IdentityServer。
我正在尝试设置 IdentityServer 来管理 Asp.Net MVC 应用程序的安全性。
我正在关注他们网站上的教程:Asp.Net MVC with IdentityServer
但是,我正在做一些稍微不同的事情,因为我有一个用于身份“服务器”部分的单独项目,该项目导致 2 个 Startup.cs 文件,一个用于应用程序,一个用于身份服务器
对于应用程序,Startup.cs 文件如下所示
对于身份服务器,startup.cs 文件是
我也在设置授权管理器
例如,如果我定义了一个用 ResourceAuthorize 属性修饰的控制器方法,就像这样
然后,当我第一次尝试访问此方法时,我将被重定向到默认登录页面。
然而,我不明白的是,为什么当我使用为应用程序定义的用户登录时(见下文),
我收到 403 错误,Bearer error="insufficient_scope"。
谁能解释我做错了什么?
任何后续访问操作方法的尝试都将返回相同的错误。在我看来,我定义的用户拥有能够访问此方法的正确声明。但是,当我第一次尝试访问此方法时,声明检查只发生一次。登录后,我得到一个 cookie,并且在随后尝试访问该方法期间不会进行声明检查。
我有点迷茫,希望能得到一些帮助来解决这个问题。
提前致谢。
编辑:这里是分数和客户类
和客户端类
我还创建了一个自定义过滤器属性,用于确定何时进行索赔检查。
断点仅在对 url 的初始请求时被命中。在后续请求中,过滤器属性断点未命中,因此不进行检查。这让我感到惊讶,因为我认为每次请求 url 时都必须进行检查。