标签: thinktecture-ident-server

IdentityServer流程

IdentityServer支持在Flows枚举中定义并为客户端设置的不同OpenId Connect流.还有每种类型的流量,并在文档给他们很多的参考样本,但我找不到什么流是一个简单的定义列表的文件,如果他们是太明显言传.但我想他们不是.您能告诉我们这些差异的更多信息,也许我们可以将其添加到文档中吗?

那么什么是:隐式流,资源所有者密码凭证流,授权代码流,客户端凭证流,自定义授权流和混合流?还有哪些是OAuth流,哪些是OpenID Connect流?

谢谢!

openid oauth-2.0 thinktecture-ident-server openid-connect identityserver3

54
推荐指数
4
解决办法
3万
查看次数

Oauth2 Implicit Flow使用单页面应用程序刷新访问令牌

我使用的是Thinktecture AuthorizationServer(AS),它运行良好.

我想编写一个原生的javascript单页应用程序,可以直接调用WebAPI,但隐式流程不提供刷新令牌.

如果进行了AJAX调用,如果令牌已过期,API将向登录页面发送重定向,因为数据使用动态弹出窗口,这将中断用户.

Facebook或Stackoverflow如何做到这一点,仍然允许页面上运行的javascript调用API?

提出的解决方案

下面的场景是否合理(假设可以使用iframe):

我的SPA指示我到AS,我通过Implicit Flow获得一个令牌.在AS中,我单击允许Read data范围,然后单击Remember decision,然后单击Allow按钮.

由于我点击了Remember decision按钮,每当我点击AS作为令牌时,会自动传回一个新令牌,而我无需登录(我可以看到FedAuth cookie记住了我的决定并相信这使得它能够正常工作).

使用我的SPA(不受信任的应用程序),我没有刷新令牌只有一个访问令牌.所以相反我:

  1. 确保用户已登录并单击记住决定(否则iframe将无法工作)
  2. 调用WebAPI,如果401响应尝试并通过以下步骤获取新令牌...
  3. 在页面上有一个隐藏的iframe,我将设置URL以从Authorization Server获取新的访问令牌.
  4. 从iframe的哈希片段中获取新令牌,然后将其存储在SPA中,并用于所有未来的WebAPI请求.

如果FedAuth cookie被盗,我想我仍然会遇到麻烦.

针对上述场景的任何标准或推荐方式?

javascript oauth-2.0 jwt thinktecture-ident-server

30
推荐指数
2
解决办法
5605
查看次数

Thinktecture IdentityServer v3指南 - 证书

我正在编写Thinktecture IdentityServer v3的演示.目的是让身份服务器在Azure网站下运行它自己的网站.

将有其他(多个)Azure网站将使用身份服务器对用户进行身份验证.

基于入门演练(请参阅https://github.com/thinktecture/Thinktecture.IdentityServer.v3/wiki/Getting-started)我有这个主要工作.

我遇到麻烦的地方是证书.

对于演示,我想创建自己的证书 - 但我不确定我需要做什么.任何指导都会有所帮助.

我对此有其他疑问:

  1. 是否可以使用自签名证书?
  2. 在生产场景中,自签名证书是否可以接受,或者它们是否真的需要由受信任的根颁发机构签名?
  3. 如何将这些证书安装到Azure网站中(或者我可以从磁盘加载)

certificate azure thinktecture-ident-server

20
推荐指数
2
解决办法
7542
查看次数

Identity Server 4:向访问令牌添加声明

我正在使用Identity Server 4和Implicit Flow,并且想要向访问令牌添加一些声明,新的声明或属性是"tenantId"和"langId".

我已将langId添加为我的范围之一,如下所示,然后通过身份服务器请求,但我也获得了tenantId.怎么会发生这种情况?

这是范围列表和客户端配置:

  public IEnumerable<Scope> GetScopes()
    {
        return new List<Scope>
        {
             // standard OpenID Connect scopes
            StandardScopes.OpenId,
            StandardScopes.ProfileAlwaysInclude,
            StandardScopes.EmailAlwaysInclude,

            new Scope
            {
                Name="langId",
                 Description = "Language",
                Type= ScopeType.Resource,
                Claims = new List<ScopeClaim>()
                {
                    new ScopeClaim("langId", true)
                }
            },
            new Scope
            {
                Name = "resourceAPIs",
                Description = "Resource APIs",
                Type= ScopeType.Resource
            },
            new Scope
            {
                Name = "security_api",
                Description = "Security APIs",
                Type= ScopeType.Resource
            },
        };
    }
Run Code Online (Sandbox Code Playgroud)

客户:

  return new List<Client>
        {
            new Client
            {
                ClientName = "angular2client", …
Run Code Online (Sandbox Code Playgroud)

c# jwt thinktecture-ident-server openid-connect identityserver4

20
推荐指数
3
解决办法
3万
查看次数

OpenID Connect是否支持资源所有者密码凭据授予?

我以前一直在使用OAuth资源所有者凭据流进行授权.

但是,我现在想考虑使用openid connect进行身份验证和授权,并且想知道openid connect是否支持资源所有者凭据流.

openid oauth-2.0 thinktecture-ident-server openid-connect

19
推荐指数
2
解决办法
1万
查看次数

IdentityServer3绕过同意屏幕

当用户使用IdentityServer3登录时,我想绕过同意屏幕,默认情况下授予所有同意.有没有办法配置这个?

这是我想绕过的屏幕:

IdentityServer3授权权限屏幕

single-sign-on thinktecture-ident-server identityserver3

19
推荐指数
1
解决办法
2298
查看次数

使用Identity和Access工具为Thinktecture.IdentityServer配置WIF/WCF

注意:构建了一个github仓库以证明导致这些问题的问题.

在创建WIF安全WCF服务时,MSDN文档建议使用Visual Studio的身份和访问工具.在服务项目上运行该工具后,以下节点将添加到web.config [ commit 0472287 ]:

<ws2007FederationHttpBinding>
  <binding name="">
    <security mode="Message">
      <message>
        <issuerMetadata address="https://localhost/adfs/services/trust/mex" />
       </message>
     </security>
   </binding>
 </ws2007FederationHttpBinding>
Run Code Online (Sandbox Code Playgroud)

身份工具添加了不正确的issuerMetadata地址,根本不包括issure节点.值得庆幸的是,所有引用证书指纹的节点都是正确创建的.向此服务的客户端项目添加服务引用会导致客户端上的配置无效.在如下更改消息节点的内容后,创建对服务的服务引用会留下几乎可用的客户端(请参阅第二个问题)[ commit 758052d ].

      <message>
        <issuer address="https://localhost:44300/issue/wstrust/mixed/username" binding="ws2007HttpBinding" bindingConfiguration="" />
        <issuerMetadata address="https://localhost:44300/issue/wstrust/mex" />
      </message>
Run Code Online (Sandbox Code Playgroud)

第一个问题在设置导致绑定未正确配置的身份工具时,我做错了吗?生成的地址在STS FederationMetadata.xml文件中不存在,因此我不确定它的来源.

正确配置服务后,客户端的服务引用几乎即插即用.出于某种原因,它没有为WS2007FederationHttpBinding中的颁发者指定绑定配置.添加绑定并为WIF客户端创建绑定配置以获取令牌将导致客户端处于工作状态[ commit 39a4cbc ].

第二个问题更新服务web.config允许自动生成其余的客户端配置.我是否遗漏了客户端的内容以获得绑定自动配置?

所有这些缺少的元素都可以在IdentityMetadata.xml文件中查找,该文件是身份工具所需要的,以及两个项目都知道的FederationMetadata服务.似乎应该有一些东西可以使这些配置正确,而无需人工干预.

注意:构建了一个github仓库以证明导致这些问题的问题.

wcf wif thinktecture-ident-server

18
推荐指数
0
解决办法
378
查看次数

跳过IdentityServer3登录屏幕

我们已将Client App配置为通过OpenID Connect协议使用IdentityServer3身份验证(它是使用OWIN中间件支持OIDC的ASP.NET MVC App).

IdentityServer3本身配置为使用本地登录和外部登录(例如Azure AD).

在常规流程中,一旦App需要对用户进行身份验证,它会将其重定向到IdentityServer3登录屏幕 - 这很好.但在某些情况下,基于每个请求,我想以某种方式绕过登录屏幕,让IdentityServer3知道用户想要立即登录特定的外部身份提供商.

这可能吗?

图片

openid thinktecture-ident-server openid-connect thinktecture identityserver3

16
推荐指数
2
解决办法
6421
查看次数

将JWT声明添加为数组?

使用thinktecture JWT身份验证资源所有者流,我使用JWT的声明部分来进行客户端使用.我的问题是,如果它可以在身份服务器中添加声明并将其解码为客户端中的数组.

数组类型没有ClaimTypeValues.

作为一种解决方法,

 var user = IdentityServerPrincipal.Create(response.UserName, response.UserName);
                user.Identities.First().AddClaims(
                                            new List<Claim>()
                                        {
                                            new Claim(ClaimTypes.Name, response.UserName),
                                            new Claim(ClaimTypes.Email, response.Email),
                                            new Claim(FullName, response.FullName),
                                            new Claim(AuthorizedCompanies,JsonConvert.SerializeObject(response.AuthorizedCompanies))
                                        });
                return new AuthenticateResult(user);
Run Code Online (Sandbox Code Playgroud)

我将声明添加为json数组来声明AuthorizedCompanies并在客户端解析它.如果有的话,这里的设计模式是什么?

claims-based-identity jwt thinktecture-ident-server

14
推荐指数
3
解决办法
1万
查看次数

在真实场景中实施身份服务器身份验证

我正在调查IdentityServer 3如何工作,我仍然有完全理解的问题.

一般来说,概念对我来说很清楚,但我仍然不确定如何在实际项目中实现这一点.

这是我尝试在我的案例中实现的基本示例:link

我有web api项目,我想从任何客户端调用我的api方法(mvc,wpf,phone ...)所以我需要适合所有客户端的实现.

如果我理解得很好(可能我完全不理解),我应该有3个项目:

  • 客户
  • API
  • 承载IdentityServer的项目

所有项目都需要像图片一样的东西: 在此输入图像描述 图片上的步骤:

  1. 获得令牌
  2. 返回令牌
  3. 打电话给api
  4. 检查令牌是否正常
  5. 如果令牌好于返回数据,则显示错误

我的问题是:

  • 我的想法是如何工作的吗?
  • 我犯错误的地方?
  • 这个例子对我来说是否足够好?我错过了重要的事吗?
  • 我是否必须创建托管IdentityServer的项目,或者只需要代码示例?
  • IdentityServer主机项目是否必须是与api和客户端通信的控制台应用程序(如示例中所示),或者在现实世界中,这是以不同方式完成的吗?
  • 应该预测主机身份服务器是否了解客户端和用户?
  • 除主机标识服务器项目之外的其他一些项目是否应该了解客户端和用户?
  • 隐式流和混合流之间有什么不同,我需要什么呢?为什么?
  • 如何创建自己的登录视图?如果我使用web客户端,我想要登录html页面,但如果我使用wpf,还要有wpf登录视图,也可以使用移动客户端的不同视图.

编辑:我认为我需要 资源所有者流程.我将该资源用于查看用户输入用户名和密码的位置.

c# security authentication thinktecture-ident-server asp.net-web-api2

13
推荐指数
1
解决办法
1万
查看次数