IdentityServer支持在Flows枚举中定义并为客户端设置的不同OpenId Connect流.还有每种类型的流量,并在文档给他们很多的参考样本,但我找不到什么流是一个简单的定义列表的文件,如果他们是太明显言传.但我想他们不是.您能告诉我们这些差异的更多信息,也许我们可以将其添加到文档中吗?
那么什么是:隐式流,资源所有者密码凭证流,授权代码流,客户端凭证流,自定义授权流和混合流?还有哪些是OAuth流,哪些是OpenID Connect流?
谢谢!
openid oauth-2.0 thinktecture-ident-server openid-connect identityserver3
我使用的是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(不受信任的应用程序),我没有刷新令牌只有一个访问令牌.所以相反我:
如果FedAuth cookie被盗,我想我仍然会遇到麻烦.
针对上述场景的任何标准或推荐方式?
我正在编写Thinktecture IdentityServer v3的演示.目的是让身份服务器在Azure网站下运行它自己的网站.
将有其他(多个)Azure网站将使用身份服务器对用户进行身份验证.
基于入门演练(请参阅https://github.com/thinktecture/Thinktecture.IdentityServer.v3/wiki/Getting-started)我有这个主要工作.
我遇到麻烦的地方是证书.
对于演示,我想创建自己的证书 - 但我不确定我需要做什么.任何指导都会有所帮助.
我对此有其他疑问:
我正在使用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
我以前一直在使用OAuth资源所有者凭据流进行授权.
但是,我现在想考虑使用openid connect进行身份验证和授权,并且想知道openid connect是否支持资源所有者凭据流.
当用户使用IdentityServer3登录时,我想绕过同意屏幕,默认情况下授予所有同意.有没有办法配置这个?
这是我想绕过的屏幕:
注意:构建了一个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仓库以证明导致这些问题的问题.
我们已将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
使用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并在客户端解析它.如果有的话,这里的设计模式是什么?
我正在调查IdentityServer 3如何工作,我仍然有完全理解的问题.
一般来说,概念对我来说很清楚,但我仍然不确定如何在实际项目中实现这一点.
这是我尝试在我的案例中实现的基本示例:link
我有web api项目,我想从任何客户端调用我的api方法(mvc,wpf,phone ...)所以我需要适合所有客户端的实现.
如果我理解得很好(可能我完全不理解),我应该有3个项目:
我的问题是:
编辑:我认为我需要 资源所有者流程.我将该资源用于查看用户输入用户名和密码的位置.
c# security authentication thinktecture-ident-server asp.net-web-api2
jwt ×3
oauth-2.0 ×3
openid ×3
c# ×2
azure ×1
certificate ×1
javascript ×1
security ×1
thinktecture ×1
wcf ×1
wif ×1