我正在调查IdentityServer 3如何工作,我仍然有完全理解的问题.
一般来说,概念对我来说很清楚,但我仍然不确定如何在实际项目中实现这一点.
这是我尝试在我的案例中实现的基本示例:link
我有web api项目,我想从任何客户端调用我的api方法(mvc,wpf,phone ...)所以我需要适合所有客户端的实现.
如果我理解得很好(可能我完全不理解),我应该有3个项目:
我的问题是:
编辑:我认为我需要 资源所有者流程.我将该资源用于查看用户输入用户名和密码的位置.
c# security authentication thinktecture-ident-server asp.net-web-api2
Thinktecture IdentityServer V3是否支持SAML,还是仅支持OAuth?
如何在Thinktecture IdentityServer v3中启用日志记录?
我目前正在收到一个通用的错误页面,说"出现意外错误".
我能够弄清楚通常的错误会被返回,ErrorPageFilterAttribute这似乎解决了一些ILog记录我所追求的细节的实现.
我怀疑它是一些具体的实现ILog需要以某种方式配置.
除了thinktecture的身份服务器之外,还有谁知道其他任何身份服务器?我需要评估一些,但我找不到了?
我目前正在使用Thinktecture Identity Server版本2.4和Windows Identity Foundation来保护.net应用程序和服务器之间的通信,使用已发布的令牌.
我通过公开联合端点并使用通道工厂的"CreateChannelWithIssuedToken(SecurityToken)"方法来提供从Issue请求返回的安全令牌,从而在标准WCF NET TCP通道上工作.
但是,似乎没有允许我们传入实例上下文的DuplexChannelFactory的等效方法.我已经阅读了这篇文章 - http://msdn.microsoft.com/en-us/library/cc668765(v=vs.110).aspx - 其中详细介绍了如何创建双工绑定以实现此目的,但是在创建通道时我看不到在通道上设置安全令牌的方法.
在客户端凭据上有IssuedToken属性 - http://msdn.microsoft.com/en-us/library/system.servicemodel.description.clientcredentials.issuedtoken(v=vs.110).aspx - 但是它是只读的.
有没有人使用可以提供建议的TCP消息安全模式在双工通道上实现联邦安全性?
我在使用Thinktecture身份服务器v3集成外部提供商即谷歌时遇到问题.我收到以下错误:"客户端应用程序未知或未经授权." 任何人都对这个错误有所了解.
从授权服务器检索访问令牌后,在AngularJS中存储访问令牌的最佳做法是什么?我已经看到很多使用localStorage服务的建议,但后来我读过其他帖子/博客说永远不会使用localStorage来存储令牌,它不安全等等.
由于上面的混合信息,我很难用Angular包围安全性.
我刚刚设置了一个SelfHost(InMem with WS-Fed) Thinktecture IdentityServer3项目示例,我正在尝试使用它来获取JWT,问题是我只使用alg接收使用非对称密钥签名的令牌,RS256但我需要使用alg对称,HS256所以我可以在客户端上使用相同的密钥.
我试图通过在服务器上配置依赖方而没有成功来遵循一些示例.
例如,我看到以下标记:
var relyingParty = new RelyingParty()
{
Enabled = true,
Realm = "urn:carbon",
Name = "Test party",
SymmetricSigningKey =
Convert.FromBase64String("R03W9kJERSSLH11Px+R/O7EYfAadSMQfZD5haQZj6eU="),
TokenLifeTime = 120
};
Run Code Online (Sandbox Code Playgroud)
但是,当我在我的代码上尝试它时,我有一个错误SymmetricSigningKey,它说:
'Thinktecture.IdentityServer.WsFederation.Models.RelyingParty'不包含'SymmetricSigningKey'的定义
我做错了什么?,提前谢谢!
UPDATE
启动文件的标记:
public void Configuration(IAppBuilder appBuilder)
{
var factory = InMemoryFactory.Create(
users: Users.Get(),
clients: Clients.Get(),
scopes: Scopes.Get()
);
var options = new IdentityServerOptions
{
IssuerUri = "https://idsrv3.com",
SiteName = "Thinktecture IdentityServer3 - WsFed", …Run Code Online (Sandbox Code Playgroud) c# ws-security claims-based-identity jwt thinktecture-ident-server
我正在使用Identity Server 3作为我正在构建的.Net MVC Web应用程序的中央身份验证服务器.
我已将身份验证服务器配置为使用Open ID Connect身份提供程序,以允许用户使用混合流程对多租户Azure Active Directory帐户进行身份验证.
目前,登录按预期工作,我的客户端应用程序重定向到身份验证服务器,然后身份验证服务器重定向到Microsoft进行登录,然后返回到具有正确填充的访问令牌的客户端应用程序.
但是,当我尝试注销时,我被正确地重定向到Microsoft,但页面在返回到身份验证服务器时停止,而不是继续返回到我的客户端应用程序.
我相信我已按照此处的说明正确设置了帖子注销重定向,我认为我的所有设置都可以.
当我下载Identity Server 3代码并对其进行调试时,它正确设置signOutMessageId到查询字符串上,但在UseAutofacMiddleware尝试重定向到我的映射signoutcallback位置时,在方法内部遇到以下错误:
抛出异常:mscorlib.dll中的"System.InvalidOperationException"
附加信息:已发送标头
我的验证服务器设置:
app.Map("identity", idsrvApp => {
var idSvrFactory = new IdentityServerServiceFactory();
var options = new IdentityServerOptions
{
SiteName = "Site Name",
SigningCertificate = <Certificate>,
Factory = idSvrFactory,
AuthenticationOptions = new AuthenticationOptions
{
IdentityProviders = ConfigureIdentityProviders,
EnablePostSignOutAutoRedirect = true,
PostSignOutAutoRedirectDelay = 3
}
};
idsrvApp.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
idsrvApp.UseIdentityServer(options);
idsrvApp.Map("/signoutcallback", cb => { …Run Code Online (Sandbox Code Playgroud) 我正在为我的一个Identity Server 3客户端使用授权代码流,它配置如下:
ClientId = "tripgalleryauthcode",
ClientName = "Trip Gallery",
Flow = Flows.AuthorizationCode,
AllowAccessToAllScopes = true,
RequireConsent = false,
// redirect = URI of our callback controller in the IOS application
RedirectUris = new List<string>
{
"somecallbackuri"
},
ClientSecrets = new List<Secret>()
{
"somesecret"
},
// refresh token options
AccessTokenType = AccessTokenType.Jwt,
AccessTokenLifetime = 120,
RefreshTokenUsage = TokenUsage.OneTimeOnly,
RefreshTokenExpiration = TokenExpiration.Absolute,
AbsoluteRefreshTokenLifetime = 360,
Run Code Online (Sandbox Code Playgroud)
如您所见,它被配置为在2分钟内使访问令牌到期,在6分钟内使刷新令牌到期.我这样做是因为我想尝试在更短的时间范围内调试问题而不是我在生产中使用的那个:刷新令牌15天,访问令牌1小时.我们注意到由于某种原因,今天发布的刷新令牌明天不起作用.这就是为什么我决定减少时间,这就是发生的事情:
我注意到了更多.发生的事情是访问令牌到期后2分钟我得到400错误.它说刷新令牌无效.
这是Identity Server的日志.
w3wp.exe Information: 0 : …Run Code Online (Sandbox Code Playgroud)