问题标签 [identityserver4]

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 投票
3 回答
71232 浏览

c# - IdentityServer4 在 asp.net core 中注册 UserService 并从数据库中获取用户

我已经搜索了如何UserService在 asp.net 核心中使用 IdentityServer4 注册一个,但我似乎找不到正确的方法。

这是在此处找到的注册 InMemoryUsers 的代码,但是我想从我的 MSSQL DB 访问用户,而不是示例中定义的静态用户。

然后我看了看是针对IdentityServer3的。

从在线阅读看来我需要使用 DI 系统来注册 UserService,但我不确定它如何绑定到 IdentityServer,例如。

所以我的问题是:

如何将我的绑定UserService到构建器(IdentityServer4 用户)?我将如何调用我的数据库来访问和验证我现有的数据库用户UserService(我使用存储库连接到数据库)?

考虑到这必须asp.net core一起使用。

谢谢!

0 投票
2 回答
1554 浏览

webforms - asp.net webform 上的 IdentityServer (OpenId Connect) 身份验证

我正在尝试使用 IdentityServer3 对带有 owin 管道(无 mvc)的 asp.net webform 应用程序上的用户进行身份验证

所有示例都建议像 mvc 应用程序一样配置应用程序,但是当我尝试访问 webform 应用程序的受保护资源时,应用程序不会重定向到 IdentityServer 登录页面

这是我的客户端(网络表单)配置

[启动.cs]

我确定我忘记了什么

0 投票
0 回答
746 浏览

angularjs - OpenId Connect + SPA + 后端 API + 身份服务器

我有与后端 API 通信的 SPA (angular.js)。我想要实现的是 OpenId Connect 的混合流,它将为 API(登录用户)发布身份令牌并为 SPA 设置角色。

我是根据这个示例做的 - https://github.com/IdentityServer/IdentityServer4.Samples/tree/dev/Mvc/src/IdSvrHost

如果我将 [Authorize] 属性放在某个控制器上并尝试访问它,这一切都很好 - 我被重定向到登录屏幕并可以登录。我正在使用 AspNet OpenId Connect 中间件来登录用户并访问他的声明。

问题是我想要一个简单的登录屏幕,在成为未经授权的用户后没有重定向(即第一次用户进入应用程序并单击“登录”按钮)。

我无法理解的是(来自上面提到的示例 LoginController.cs):

登录屏幕获取此 SignInId cookie 和 id(在未经授权的重定向期间),稍后将在实际登录期间使用(用于 SignInResult)。

1) 混合流是否最适合与后端 API 一起使用的 SPA?这里的客户端和身份服务器都是我们的,因此它们是值得信赖的。

2)如果不需要SignInId,那么用空白登录表单实现混合流的方法是什么?

3)如果 SignInId 是必要的,那么让空白登录屏幕和使用这种方法的工作流程是什么?遗憾的是,使用 [Authorize] 重定向是我现在看到的唯一选择

4) 这种方法(OpenId Connect 的混合流程)可以很好地与移动应用程序一起使用吗?(考虑 cookie、存储等)

5) 目前 Identity Server 在另一个项目中(在我的 API 旁边)——如果 API 和 Identity Server 都在同一个项目中(自托管)或者这不会影响任何事情,会有什么变化吗?@kapoc

写预览

0 投票
1 回答
1665 浏览

oauth-2.0 - Thinktecture身份服务器客户端选择与实现

我正试图通过身份服务器让我的头脑脱离云端。

我想实现身份服务器项目以进行身份​​验证

  1. 一个 ASP.NET MVC 5 应用程序
  2. 一个 ASP.NET Web API
  3. 一个windows服务实现

在这篇博文中,我已经阅读了有关客户的一些详细信息。作者简单地说:

OAuth 2 为不同的用例提供了几种“授权类型”。定义的授权类型是:

  1. 在 Web 服务器上运行的应用程序的授权码
  2. 隐式用于基于浏览器或移动应用程序
  3. 使用用户名和密码登录的密码
  4. 用于应用程序访问的客户端凭据

授权码和隐式有什么区别?这是否意味着应该使用隐式,例如 javascript 代码?

说我需要是对的:

  1. ASP.NET MVC 应用程序的密码授权
  2. Web API 的客户端凭据
  3. windows服务的授权码?

还有另一个问题,我想在我的 web api 中基于 Bearer Token 和一个简单的 apiKey 实现授权。两种类型可以结合吗?如何使用身份服务器实现 apiKey?

非常感谢,如果这些是愚蠢的问题,请原谅。

0 投票
1 回答
996 浏览

c# - Asp.NET MVC 5 IdentityServer4 外部提供程序

使用 IdentityServer3,一种配置外部身份验证提供程序的方法被添加到应用程序的 Startup 方法中

在 IdentityServer4 中,一切都是围绕 IApplicationBuilder 接口设计的,它没有上述方法。

这是否意味着在 V4 中尚不支持外部提供者身份验证?

我尝试在 Configure 方法中注入 IAppBuilder 失败,但这将是一个非常混乱的解决方案......

有什么想法吗?谢谢

0 投票
1 回答
1144 浏览

oauth-2.0 - 通过 IdentityServer4 为未经身份验证的用户提供 OAuth 2.0 一次性访问令牌

对于 oauth 条款的不正确使用,我提前道歉

我有 4 个“派对”,如下所示(在可能的情况下故意不使用 oauth 术语):

  • 浏览器中的最终用户(javascript)
  • 我们的网站(aspnet)
  • 我们的网络 API (aspnet)
  • 我们的身份验证服务器(aspnet 利用身份服务器 4)

我的使用场景是我们只希望 API 被首先从网站请求页面的浏览器调用。虽然 API 不会发布敏感信息,但我们想引入一层关于被垃圾邮件发送的 API 的复杂性。

我们的最终用户将不会登录

我想这样的流程类似于:

  1. 浏览器从网站请求某个页面(可能会导致 js 进行 api 调用的页面)
  2. 网站从身份验证服务器请求令牌
  3. 身份验证服务器验证令牌请求来自网站(服务器本身)
  4. 身份验证服务器向网站返回一个令牌
  5. 网站返回页面,包括访问令牌
  6. 浏览器能够使用令牌向 api 发出请求

虽然令人费解,但我相信这至少类似于客户端访问授权流程?

然后,这些令牌可能会被网站或身份验证服务器限制。

是的,我知道这并不能保护 api 免受许多其他向量的影响,但它确实消除了最简单的情况,而这正是我们现在想要实现的。我要补充一点,我没有定义这个要求,我只是想找到一种方法来利用那里的技术来实现它,而不是犯下我自己滚动任何东西的错误。

有人可以确认/否认我可以在这里使用 oauth 流程吗?任何使用给定流程和 IdentityServer 的示例项目?

IdentityServer3 / non-aspnet[core/5] 例子很好,我可以翻译

0 投票
4 回答
15740 浏览

identityserver3 - How would I generate the Identity Server signing certificate

In the identity server samples we find code like this in Startup.cs

How would I go about replacing this for production scenarios?

0 投票
1 回答
109 浏览

asp.net-web-api - 企业环境中的 IdenityServer - 跨多个数据库解析用户信息

我们使用 IdentityServer3 作为我们的中央身份验证提供程序。现在我有一个关于企业环境中的 IdenityServer 的一般性问题。我试着用下面的例子来解释它:

  1. 如果用户成功通过身份验证,他会从提供者那里获得一个令牌。令牌包括用户的唯一 ID。
  2. 经过身份验证的用户向 WebApi 发送请求,以创建新项目(例如新产品)。
  3. WebApi 从令牌中提取唯一 ID 并在数据库中创建新产品。此外,新产品与唯一的用户 ID 相关联(例如,作为 creationUserId)。
  4. 另一个用户向 WebApi 发送请求以获取所有可用产品。
  5. WebApi 创建一个数据库查询来检索所有产品。此外,WebApi 想要将每个产品的 creationUserId 转换为相关的用户名。但这是不可能的,因为用户名存储在身份数据库中,身份数据库是与应用程序数据库不同的数据库(例如,用于产品)。是否有一些最佳实践来解决此要求?

非常感谢您的帮助!

问候

0 投票
2 回答
152 浏览

oauth - 隐含的客户端安全性是脆弱的还是我的担忧无效

我在身份服务器中使用隐式客户端,另一方面有一个本机 android 应用程序,

我的安全问题是:

1-应用逆向工程:如果攻击者可以访问client_Id

redirect_uri和/或response_type,他将能够模仿登录请求。

通过这样做,他正在冒充原始客户

2-中间人:那些client_id,...通过未加密的https URI发送到身份服务器,为什么不将它们隐藏在Header中?

3-如果重定向URI不是,浏览器将重新发送URI中的令牌,将其显示给中间ooblocalhost人,

在浏览器发送请求之前,您可以说哦,不,应用程序正在读取令牌并关闭浏览器这么快,

我们真的可以依靠关闭浏览器的应用程序速度,这听起来很软吗?

哪个问题是合理的关切,哪个不是,以及如何解决合理的关切。

关于第 1 点:谷歌如何保护它的服务,如谷歌地图,客户报价至关重要,它必须非常安全,对吧!!?

编辑

如果我们在 header 中传递 client_id 来加密它,我们将违反 http 1.1 规范和 oauth2 规范,我们仍然没有做太多,因为 client_id 是驻留在手机内部,通过小的逆向工程你可以得到它

0 投票
1 回答
11586 浏览

c# - 如何使 IdentityServer 将用户身份添加到访问令牌?

简短:我的客户端从 IdentityServer 示例服务器检索访问令牌,然后将其传递给我的 WebApi。在我的控制器中, this.HttpContext.User.GetUserId() 返回 null (尽管用户有其他声明)。我怀疑访问令牌中没有名称身份声明。如何让 IdentityServer 包含它?

到目前为止我已经尝试过:

  • 从混合流切换到隐式流(随机尝试)
  • 在 IdSvrHost 范围定义中我添加了

    Claims = { new ScopeClaim(ClaimTypes.NameIdentifier, alwaysInclude: true) }

  • 在 IdSvrHost 客户端定义中我添加了

    声明 = { 新声明(ClaimTypes.NameIdentifier,“42”)}

(也是随机尝试)

我还尝试了范围定义中的其他范围,但都没有出现。看起来,nameidentity 通常包含在身份令牌中,但是对于我知道的大多数公共 API,您不会向服务器提供身份令牌。

更多详细信息:IdSrvHost 和 Api 位于不同的主机上。控制器具有[授权]。事实上,我可以看到其他的说法。Api 配置为

范围:

和客户:

授权 URI:

我也试过