问题标签 [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.

0 投票
1 回答
1315 浏览

asp.net-web-api - 是否可以从消息处理程序访问控制器/操作属性?

是否有一种实用的方法可以从消息处理程序/委托处理程序访问装饰控制器或操作的属性?

Pedro Felix 博客条目的图表中,看起来消息处理程序在管道中为时过早,并且在控制器调度程序消息处理程序运行之前信息将不可用。正确的?

关于我的用例:
我正在使用 Thinktecture 身份模型,能够AllowAnonymousAuthenticationHandler.

0 投票
1 回答
359 浏览

claims-based-identity - 如何使用 Thinktecture.IdentityServer.45 在令牌中返回多个身份?

Thinktecture.IdentityModel.45库中,我可以Microsoft.IdentityModel.Claims.ClaimsIdentityCollection通过执行以下操作来获得:

我们有一个系统,用户可以在其中登录,然后选择他们所属的组织环境。每个上下文都应该代表令牌中可用的内容(每个组织的一个身份和一组特定声明)。如何让Thinktecture.IdentityServer.45返回包含多个身份的令牌?

0 投票
3 回答
1566 浏览

asp.net-web-api - 带有 Thinktecture.IdentityModel 的 Asp.net Webapi CORS

我正在研究使用 Thinktecture.Identitymodel 解决 Asp.net Webapi CORS 问题,如此 URL http://brockallen.com/2012/06/28/cors-support-in-webapi-mvc-and-iis-with-中所述thinktecture-identitymodel/

我正在使用 .Net 4.5 的 VS2012 我在这里遇到了几个问题:

1)这是我提出请求时遇到的错误

试图以与数组不兼容的类型访问元素 在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。System.ArrayTypeMismatchException:试图以与数组不兼容的类型访问元素。

[ArrayTypeMismatchException: 试图将元素作为与数组不兼容的类型访问。]
System.Collections.Generic.List`1.Insert(Int32 index, T item) +62
Galaxy.CorsConfig.RegisterCors(HttpConfiguration config) +99
Galaxy。 WebApiApplication.Application_Start() +377

[HttpException (0x80004005): 试图以与数组不兼容的类型访问元素。]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +12864673
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] 处理程序)+175
System.Web.HttpApplication.InitSpecial(HttpApplicationState 状态,MethodInfo[] 处理程序,IntPtr appContext,HttpContext 上下文)
+304 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext,HttpContext 上下文)+404
System.Web .Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException (0x80004005): 试图以与数组不兼容的类型访问元素。]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12881540 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159 System.Web。 HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12722601

我的应用程序池指向 Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.17929

2)我的第二个问题是在做WebApi中提到的事情之后。我还需要为 IIS 添加 HTTPmodule 吗?

它应该很容易上手。我不知道我在这里错过了什么。任何指针都受到高度赞赏。

谢谢。

0 投票
1 回答
170 浏览

wif - 如何根据应用程序配置通过 tt.idm 接受 SAML2 令牌

好的,我正在使用 Thinktecture IdentityModel 4.0 (tt.idm) 通过我的 WebAPI 接受传入的 SAML2 安全令牌并将它们转换为 ClaimsPrincipals。根据 tt.idm 附带的示例,我有一个按我期望的方式工作的项目。

唯一的问题是所有示例(以及我的项目)都使用硬编码的 SecurityTokenHandlerConfiguration 对象,我想在我的 WIF 配置中使用这些设置。

所以,我目前有一些看起来像这样的东西:

但是,我想从我的配置中加载这些值 - 无论是通过加载 microsoft.identityModel 配置部分自动加载,还是......任何有意义的。

但是,到目前为止,没有任何效果 - 例如,仅更新 ConfigurationBasedIssuerNameRegistry 会产生一个空的 IssuerNameRegistry。加载 microsoft.identityModel 配置部分会产生......一个基本上没有属性的配置部分。

有没有办法告诉 tt.idm 从当前配置加载?或者告诉 WIF 的方法?

我应该如何进行?oO

0 投票
1 回答
2943 浏览

asp.net - Thinktecture.IdentityModel 与 SimpleMembership

我想使用 ASP.NET SimpleMembership 对使用我的 WebAPI 的用户进行身份验证。Thinktecture 有一个很棒的身份验证库,名为 Thinktecture.IdentityModel (http://thinktecture.github.com/Thinktecture.IdentityModel.45/),其中一个示例将 Forms Auth 与 Basic Auth ( source ) 联系起来。但是,该示例使用 Membership.ValidateUser() 如果没有 ASP.NET Membership 提供程序就无法工作,SimpleMembership (source)不支持(编辑:这不完全正确,请参阅下面的 Mark 回答)。


编辑

这是我所做的:

1) 创建一个新的 MVC Internet 应用程序

2) 通过 NuGet 安装 Thinktecture.IdentityModel

3)通过脚手架创建模型和api控制器:

4)运行项目,创建一个新用户并使用 Fiddler 创建一个新 Goober

5) 为 GetGoober(int id) 添加 [Authorize]

6)在 WebApiConfig.cs 添加:

当我运行该项目并使用 Fiddler 访问 api/goober/1 时,我得到一个401 www-Authenticate: unspecified。但是,如果我首先使用 AccountController 登录,然后使用 Fiddler,我会得到200,一切都很好。

编辑

好的,我认为这个问题与我最初的问题无关。我怀疑它与模板中 SimpleMembership 的初始化有关。当我打开项目并运行调试然后使用 Fiddler 访问 api 时,我无法通过 Auth。但是,当我只需单击 Web 前端上的“注册”链接时,我就会通过 Auth。我猜这是因为在 AccountController 上调用了 InitializeSimpleMembershipAttribute,所以在调用控制器之前不会初始化?


我尝试使用 WebSecurity.Login() 代替 Membership.ValidateUser() 但这不起作用。

我不知道如何实际实现这一点。有人有建议吗?还是我试图从错误的角度解决这个问题?

0 投票
1 回答
677 浏览

api - 使用简单的 Web 令牌访问 Rest API

我已经使用 Asp.Net Web.Api 编写了 REST api。

它使用 ThinkTecture 的 Identity Server 进行保护。

我编写了一个简单的控制台客户端,允许用户输入用户名和密码。然后客户端使用这些凭据向身份服务器进行身份验证,成功获取令牌,将令牌传递给我的 rest api,由 api 进行身份验证,然后从 api 获取它的数据。

现在我已经编写了一个使用 api 的 MVC 站点。我不确定的是,如果我没有用户名和密码来获取令牌,我如何查询 api?我显然不希望用户每次我想调用 api 时都登录。我可以做一些类似于设置 auth cookie 的事情吗?

0 投票
1 回答
3910 浏览

asp.net-web-api - 在 Asp.Net WebAPI 中使用 Oauth2 令牌进行授权

您好,我正在构建一个 ASP.Net WebApi。首先,我使用基本身份验证 .net 会员提供程序和Thinktecture Identitymodel授权了 WebApi 。

我想这再简单不过了。

为了更进一步,我设置了 Thinktecture IdentityServer,它为我提供了oauth2 令牌。我的问题是如何使用身份服务器验证客户端发送给我的访问令牌(WebApi)

我一直在研究 IdentityModel 提供的AddJsonWebToken方法,但我无法真正弄清楚我应该调用身份服务器中的哪个 uri(端点)来验证令牌。可能我只是完全迷失在这里并且错过了重点,任何帮助都会非常感激!

总结一下:

如何验证我在 WebApi 中收到的 access_tokens 以及如何将其连接到 [Authorize] 属性?

0 投票
3 回答
7996 浏览

wcf - 如何在具有 WCF 服务参考的客户端中使用 IssuedToken

我有一个 WinForms 应用程序,其中包含从使用 WS2007FederationHttpBinding 的 WCF 服务生成的服务参考。我不明白为什么以下不起作用。

我的 WinForms 应用程序正在调用使用 Thinktecture.IdentityServer 的 WCF 服务,该服务设置为处理 BearerKey 类型令牌。

从我的客户那里,我只需获取一个有效的访问令牌,然后进行以下调用:

以下是服务参考的 winforms 客户端 app.config:

当我尝试执行服务调用 (svcRef.GetClaims()) 时,我收到此错误:

“未指定安全令牌颁发者的地址。必须在目标' https://identity.MyCo.com/issue/wsfed '的绑定中指定明确的颁发者地址,或者必须在凭据中配置本地颁发者地址。”

这个错误很蹩脚,而且令人困惑,似乎在配置中指定了一个发行者!

最后,我知道 WCF 服务和身份服务是有效的,因为这一切都可以使用自定义 ChannelFactory 正常工作,也使用完全相同的方法来应用令牌:

var channel = factory.CreateChannelWithIssuedToken(token);

但我的要求是使用生成的ServiceReference。:(

0 投票
2 回答
6118 浏览

c# - 如何过期/更新存储在 Web API SessionToken 中的 ClaimsIdentity 声明

我正在使用出色的 Thinktecture.IdentityModel 库在 ASP.NET Web API 项目中执行身份验证/授权,该项目将从移动设备和可能的 Web 客户端使用。我正在使用基本身份验证来验证移动客户端以访问 Web api,并利用 Thinktecture.IdentityModel 提供的内置 SessionToken 生成。但是,我对如何撤销添加到 ClaimsIdentity 声明集合中的声明有一些担忧,然后(我认为)将这些声明编码到提供给客户端的 SessionToken 中......

这是我到目前为止所拥有的:

按照 IdentityModel 示例项目中的示例,我创建了以下类

像这样从我的 Global.asax 类中调用的

移动设备从个人那里收集用户名和密码,并正确设置身份验证标头并将凭据提供给必要的 Web 端点http://myhost/api/Authenticate

在服务器上,使用用户名/密码调用我的 Membership.ValidatUser,如果验证通过,MyClaimsTransformer则调用 Authenticate 方法。

然后,移动客户端会收到一个令牌,它可以在任何后续请求的身份验证标头中传递该令牌。

这一切都很好。

现在我想做的是在 ClaimsTransformer 中添加一些代码,这些代码将执行类似于以下伪代码的操作。

我希望限制我需要从数据库请求给定用户的角色或权限列表的次数,并方便在自定义 AuthorizeAttribute 中检查这些角色/权限。

但是,当我开始添加此内容时,我开始考虑用户可能已登录并收到此令牌的场景,但通过系统的其他用户的某些操作,他们的角色将被更改或撤销。初始用户仍将拥有此令牌,其中包含现已过期的角色/权限列表,并且在令牌过期之前可以访问任何内容,或者将获得对某些内容的新访问权限,但在他们以某种方式注销之前实际上不会收到该访问权限。

是否有使以这种方式创建的 SessionToken 无效的机制?或者,如果我找到某种方式知道用户角色/权限已发生更改,我将如何修改声明并以无缝方式重新发布 SessionToken?

此外,如何完全撤销 SessionToken,即如果我想“注销”用户,那将如何工作?

0 投票
0 回答
1909 浏览

c# - ThinkTecture身份模型基于Token获取用户

我正在使用 Thinktecture 的甜蜜 Indentity Model 库。我看起来高高在低,可能要问一个愚蠢的问题。基本上,我们有一个 Web 窗体应用程序,我正在向它添加 ASP.net Web api 功能。我安装了身份代码示例并收集了我认为我需要让它为会话令牌工作我能够获得一个令牌并在未来的调用中发回但在我的 API 控制器中似乎没有设置用户对象。我假设框架会在提供令牌时询问令牌并根据令牌数据自动设置委托人并将委托人标记为已验证?这是一个无效的假设吗?这是我必须自己设定的吗?

基本上,我使用令牌进行授权和身份验证,但需要从令牌/会话中提取 UserID 以获取其他业务规则。

再次,如果愚蠢的问题可以随意欺骗我。如果这对任何建议有任何影响,我正在使用单元测试进行测试。

来自单元测试的代码:1)获取令牌,使用我们的业务逻辑成功验证用户并成功返回令牌:

2)HTTP帮助方法:

3) 调用代码: