问题标签 [thinktecture-ident-server]

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 回答
2032 浏览

wcf - SAML2 使用 Thinktecture 和 WCF

我正在使用 Thinktecture IdentityServer 和 WCF 服务设置 SAML2 STS。这个想法是让 Thinktecture 提供随后在 WCF 服务中使用的断言。

现在,我使用 SAML 11 Assertions 运行良好 - urn:oasis:names:tc:SAML:1.0:assertion

断言是这样的:

现在,要求是使用 SAML2,而不是以前的版本。所以在 Thinktecture 中改变 Token 类型很简单,新的 Assertion 可以很好地生成,并且可以很好地被客户端选中。

新的 SAML2 断言:

但是当我们尝试通过传递新的断言来使用 WCF 时,我们得到了异常:

  • XmlException:无法从具有 BinarySecretSecurityToken 的“urn:oasis:names:tc:SAML:2.0:assertion”命名空间的“Assertion”元素中读取令牌,并带有“”ValueType。如果此元素预计有效,请确保将安全性配置为使用指定名称、命名空间和值类型的令牌

这是 WCF web.config 的摘录:

那么我们做错了什么?

0 投票
3 回答
9217 浏览

thinktecture-ident-server - Thinktecture 身份服务器与授权服务器

上周我正在研究这个主题,不幸的是我无法弄清楚。我了解身份验证和授权之间的区别。

我将不胜感激有关该主题的任何指导。

我一般需要的是为几个由 api 驱动的网站实现单点登录,这些网站也应该处理身份验证。用户应该能够使用用户名/密码或分别通过任何第三方服务(如 facebook、google+、twitter 等)注册/登录。

在上面的场景中,更好的方法是什么?我应该只使用身份服务器,还是只使用授权服务器,或者两者都使用?

先感谢您。

0 投票
1 回答
221 浏览

asp.net - 如何在 ASP.NET REST API 中使用来自 identityServer 的 JWT

我花了几天时间试图跟上这个速度,但是自从我上次接触一个 Web 项目以来,一切都发生了变化,我现在完全不知所措,一无所获。我正在尝试将各个部分组合在一起以实现隐式授权流程 - 只是一个简单的 Web API,它尊重我的本地 IS 实例发出的令牌

我已经能够在本地下载和配置 IS v2。在将浏览器发送到登录页面后,我已经让它以 JWT 格式发出身份验证令牌。我可以看到令牌信息作为来自 IS 的重定向 URL 的一部分返回,例如“access_token=...&token_type=urn:ietf:params:oauth:token-type:jwt&expires_in=599”。

所以现在我需要配置我的 asp.net API 站点来接受这些令牌,但我不知道怎么做。正如我所说,我有一段时间没有做网络工作了,所以 Owin、WIF 和这里涉及的更多东西对我来说都是全新的。

要让我的 API 站点接受这些令牌,我需要执行哪些关键步骤?我想我不确定要包含哪些包,与 WIF 方​​面相关的 web.config 中包含哪些内容,我是否需要编写任何代码才能使其工作,或者是否应该有一些配置设置组合来激活它? 我是否需要创建自定义 ClaimsAuthorizationManager?

拜托,我的身材不好,我已经看了好几天了,但我仍然不知道还有什么可以尝试的。我发现的每个示例都与我的情况有很大不同,这对我没有帮助(大多数指向 Azure 或 ADFS,或者使用现在已弃用的旧类)。这不是因为缺乏努力,我一直在阅读我能得到的所有东西,并在网上搜索了好几天。

提前感谢您的帮助。

0 投票
0 回答
599 浏览

azure - 从 Office 365/Windows Azure Active Directory 多方注销

我有一个场景,我们使用 Thinktecture Identity Server (IdSrv) 作为 R-STS 和 IP-STS,以及 O365 / WAAD tentant 作为额外的 IP-STS。用户通过 IdSrv 中的 Home Realm Discovery 功能选择要使用的身份提供者。

现在,从 RP 实现统一的 WS-Federation wsignout 是很困难的,因为我无法让注销过程针对 WAAD 正常工作(针对 Thinktecture IP-STS,它工作正常);

抱歉,我们无法让您退出。我们收到了错误的退出请求。如果您想退出,请点击以下链接。

ACS20028:请求的重定向 URL 无效。

好吧,wreply URL 参数指向 RP,WAAD 实例并不知道。

如果我尝试点击退出链接,我很抱歉,但我们无法让您退出。我们收到了一个错误的请求。

ACS20026: wtrealm 参数丢失或不正确。

我尝试直接修改 URL,使其 wreply 指向 IdSrv(它实际上是 WAAD 的 RP),但我无法让它工作。

有没有人让这个工作?

0 投票
2 回答
1590 浏览

asp.net-web-api - ADFS 提供了哪些 ThinkTecture IdentityServer 2 中没有的功能?

我试图从当前的 .NET 身份验证/授权产品组合中找出正确的架构。我无法找到很多在线信息的一个问题:让 ThinkTecture IdentityServer 2.0 联合 ADFS 2(使用 Active Directory 凭据对域用户进行身份验证)与让 IdentityServer 直接针对域对用户进行身份验证有什么好处?

对于我的公司,我只看到 ADFS 2 的 3 个可能要求,但如果 IdentityServer 足够,我宁愿避免安装它(主要是因为它是开源的,因此更易于调试、可扩展和易于理解):

  1. 企业 (Active Directory) 用户的基于声明的身份验证。
  2. 支持 Office365 SSO - 有将 Office365 与 ADFS 集成的说明
  3. 联合外部(业务合作伙伴)ADFS 服务(我们目前不需要这个,但我想保持这个选项打开)

IdentityServer 2.0 是否没有提供或不容易添加这些功能?

0 投票
1 回答
397 浏览

thinktecture-ident-server - 不同域的依赖方

在我们的地形中,我们有 foo.com、myfoo.com、outletfoo.com 和 auth.idsrv.com。

出于开发目的,这些是位于 1 个 iis 实例下的独立网站。
foo.com、myfoo.com 和 outletfoo.com 是 auth.idsrv.com 的依赖方。

如果用户为 foo.com、myfoo.com 或 outletfoo.com 中的任何链接添加了书签,并且该链接指向需要身份验证的资源,我们将重定向到 auth.idsrv.com。

foo.com、myfoo.com 和 outletfoo.com 默认不是 https,但可以是一个或多个。auth.idsrv.com 是 https。

重定向到 auth.idsrv.com 后,我输入用户名/密码一切正常。cookie “idsrvauth” 是过期会话/http。但是,在重定向回来后,idsrvauth cookie 由于会话到期而消失了。

也许只有我的配置不正确。由于 foo.com、myfoo.com、outletfoo.com 和 auth.idsrv.com 是单独的域,在身份服务器配置中是否存在支持的方案,其中依赖方可以是单独的域?您能否指出配置依赖方的正确方法,以便每个人都可以接收 idsrvauth cookie。

在验证身份验证并发生重定向时,我们如何知道示例拓扑中任何(基本上是跨域)调用应用程序中的 idsrvauth cookie?

0 投票
1 回答
877 浏览

wcf - How to bootstrap securitytoken for WCF channel created with a Unity InjectionFactory

I've had quite the challenge in handling the following scenario.

  1. I want to use the Unity DI Framework to create a new channel for my service when needed.
  2. The service is secured with Federated security.
  3. The service is not called from within a service hosted within IIS, but called from within a self-hosted WCF service.

My current issue is occurring in step 3 above - how do I bootstrap the token and yet then satisfy the above 2 requirements also?? I'll outline the solutions to each step though as they're non-trivial and will hopefully assist someone else with this issue.

Solving issue 1: The following code-snippet will create a new instance of the channel anytime one is required.

Here's some examples of people doing this better than I: http://unity.codeplex.com/discussions/211736 https://gist.github.com/tracker1/5675161

You can also use alternative lifetime managers as well e.g. the TransientLifetimeManager would work well here.

Solving Issue 2: Now the real difficulty begins - how do I include a security token with the InjectionFactory? Clearly I'm going to want to use CreatChannelWithIssuedToken, but I'm going to need to grab the bootstrap token to do so. This is fairly well documented around the net, e.g. here: http://www.cloudidentity.com/blog/2012/11/30/using-the-bootstrapcontext-property-in-net-4-5-2/ Some important things to note: make sure that you have a serviceBehaviors section in the config that specifies useIdentityConfiguration="true" otherwise your system.identityModel section will be ignored e.g.

And then your system.identityModel section should also feature:

Then, provided that you've made a request to set this correctly on the session (see my other question: AJAX call against REST endpoint secured with Thinktecture's IdentityServer STS it will be available in the session whenever you access the bootstrap context security token like so:

You can then either change your InjectionFactory to look like this:

Or perhaps better yet, create a class that inherits from ChannelFactory and add a method that pulls that combines the above logic into a single CreateChannelWithIssuedTokenUsingBootstrapContext method:

This allows you to then just call this:

Solving issue 3: Adding upon the complexity of the above two issues, I'm now trying the same thing outside of IIS in my own Self-Hosted WCF service. This same service is completely stateless, so here's where my next dilemma occurs: Bootstrapping of the security token still occurs, but it isn't occurring on the correct Thread. Unity seems to run its InjectionFactory in a separate Thread to the actual service call execution.

i.e. when the InjectionFactory delegate above executes, the CurrentPrincipal is an unauthorized GenericPrincipal. This is different from what we had in issue 2 above - where it is an authorized ClaimsPrincipal - I believe this is all set up by the IIS session (please do feel free to correct if I'm incorrect).

Funnily enough, if we then replace the above with

i.e. now just inject an unsecured Channel object, we can then observe that in our self-hosted WCF service, where we actually try to interact with the channel, the Thread.CurrentPrincipal is the authenticated ClaimsPrincipal with the SecurityToken correctly Bootstrapped on the principal.

So the problem can be summarized as the following: because the InjectionFactory delegate executes on a thread on which no Authentication/Authorization has yet taken place, the SecurityToken is not actually available to pass to the creation of the channel.

Does anybody have any suggestions on how I might solve this issue? Have I already painted myself into a corner with this particular combination of self-hosted WCF and unity?

Thanks, Clint

0 投票
1 回答
381 浏览

openid - 试图让 Thinktecture IdentityServer 示例 CodeFlowClient 工作

我正在查看 OIDC 解决方案中的 Thinktecture IdentityServer CodeFlowClient 示例。我无法让它运行。它使用 Thinktecture.IdentityModel.Oidc 项目中定义的 OpenIdConnectAuthenticationModule。在这堂课中,我在从 cookie 中读取 oidcstate 时遇到问题。请看下面的代码。

变量storedState 的值为null。我感到困惑的是 oidcstate 是用 OnEndRequest 编写的,它在 AuthenticateAsync 之后调用。AuthenticateAsync 具有 cookie 读取代码。请参阅下面 OnEndRequest 中的代码。

没有其他地方写oidcstate,所以我不知道我做错了什么。oidcstate如何在被读取之前被写入?

另外,iodcClient 配置上的 appRelativeCallbackUrl 字段是什么?它的默认值为“~/oidccallback”。在 AuthenticateAsync 中,它与请求 AppRelativeCurrentExecutionFilePath 进行比较。请看下面的代码。

它的值应该是“~/Home”吗?

对此的任何帮助将不胜感激,

问候本

0 投票
1 回答
261 浏览

identity - 应用程序中的同时 wsfed 和 hrd 身份验证 - Thinktecture Identity Server

我需要在应用程序中支持两种身份验证方法 - WS Federation (wsfed) 和 Home realm discovery (hrd)。我已经安装和定制了 Thinktecture 身份服务器,但我对实现上述场景很感兴趣。我不确定<system.identityModel.services> <federationConfiguration>部分中的配置应该是什么。

我可以在<wsFederation...>那里有两个元素,系统如何知道要使用哪个协议?

还可以在身份服务器端的单个页面中组合方法吗?

任何想法将不胜感激!

谢谢!

0 投票
1 回答
129 浏览

authentication - WS-TRUST 和 WS-FED 的实时使用情况是什么

我阅读了 2 个 WS* 协议,WS-TRUST 和 WS-FED。但我对如何使用这些协议的实时场景感到困惑。谁能告诉我在哪些情况下我可以使用 WS-TRUST 和 WS-FED ?如果有人能分辨出这两种协议中哪一个最好用于保护 REST 服务和 normal.ASPX 页面,那将非常有帮助。