我以前一直在使用OAuth资源所有者凭据流进行授权.
但是,我现在想考虑使用openid connect进行身份验证和授权,并且想知道openid connect是否支持资源所有者凭据流.
我正在研究一个我们计划首先执行API的新项目,以便我们可以在其上实现Web和本机应用程序,并允许第三方集成.到目前为止所有相当标准.
我们还希望为API提供一整套自动化测试,以确保其无回归地工作,并确保其满足要求.同样,相当标准,但因为我们正在测试API,我们将使用代码内HTTP客户端而不是Web浏览器.
我们一直在寻找oauth2/OpenID Connect来促进API的身份验证和授权 - 基本上,客户端可以进行身份验证,获取访问令牌,然后使用它来访问所有API资源.
我正在努力解决的问题是让自动化测试与oauth2部分协同工作以实现调用API的好方法.第一个想法是使用"client_credentials"或"密码"授权类型,它们似乎都适用于我们想要的东西,但它们根本没有涵盖在OpenID Connect规范中,当然还有"密码" "无论如何,至少它通常不被认为是个好主意.
这是实现这一目标的最佳方式,还是有其他最佳实践可用于其他流程,但没有Web浏览器?
编辑:在(更多)阅读之后,我有了一个新的计划.完全脱机运行测试,使用针对单独数据库的单独部署,并在测试运行之前将数据直接播种到数据库中,然后使用标准OpenID Connect流,但使用:
然后,系统可以检测到这种事实组合,并自动验证提供的用户名,而无需通过浏览器.
这看起来合情合理吗?或者,还有更好的方法?
从我的Javascript客户端应用程序向我的Identity Server应用程序发出请求时,我收到以下错误.
fail:IdentityServer4.Validation.ScopeValidator [0] 无效范围:openid
我已确保在Identity Server应用程序中添加范围.以下是我的代码.
IdentityServer应用程序(主机) Config.cs
public class Config
{
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("api1","My API")
};
}
public static IEnumerable<Client> GetClients()
{
return new List<Client>
{
new Client
{
ClientId = "js",
ClientName = "javaScript Client",
AllowedGrantTypes = GrantTypes.Implicit,
AllowAccessTokensViaBrowser = true,
RedirectUris = { "http://localhost:5003/callback.html" },
PostLogoutRedirectUris = { "http://localhost:5003/index.html" },
AllowedCorsOrigins = { "http://localhost:5003" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api1"
}
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
Startup.cs
public …Run Code Online (Sandbox Code Playgroud) c# oauth-2.0 openid-connect identityserver4 asp.net-core-webapi
通过阅读Cognito Identity Provider文档,我了解到它似乎提供了与Facebook/Google/Twitter作为身份提供商的开箱即用集成.
我的应用程序是一个以开发人员为中心的应用程序,因此我希望除了上述身份提供商的帐户之外,还允许用户使用他们的Github帐户进行注册/登录.那可能吗?
如果可能的话,我需要做多少额外的工作(比较开箱即用的Facebook/Google社交注册功能)?
single-sign-on oauth-2.0 openid-connect amazon-cognito aws-cognito
我正在研究使用OpenID connect作为我们的企业应用程序(面向消费者)的SSO协议.一般来说,它的大多数方面都符合我们的需求,除了它处理单一注销的能力,并希望得到一些指导.
我有机会回顾最新的OIDC会话管理规范,以及涉及类似主题的几个堆栈溢出问题:
正如ping所提到的那样,单个注销的处理方式与SAML2不同,因为它更加以用户为中心.这一切都很好,但它仍然不适合实际单点注销的需要.具体来说,以用户为中心的处理(通过有点kludgy iframe通信)仅适用于当前浏览器视图,但不适用于当前未被查看的RP.
例如,用户使用特定的OP登录RP A,B和C. 单点注销只会触发浏览器正在查看的RP的注销; 这将使其他会话挥之不去,这可能是一个安全问题.(如果我错误地分析了这个,请更正).
我已经看到一些在协议之外工作的解决方案(例如父域cookie,或者可能(??)相同的会话存储)但遗憾的是这些解决方案不适合我的需求.
我试图看看我是否可能错过了有关OIDC规范的内容,该规范提出了一个单一的注销协议,涵盖类似于SAML2自己的单一注销的用例?(可能是某些直接OP-> RP通信?甚至是客户端"迭代直通RP"注销?).或者我真的离开了自己为它开发专有解决方案?
BTW,也很好奇是否已经在OIDC委员会讨论过这个问题(我相信它已经有了),以及它是否在路线图中得到解决.
在此先感谢您的帮助!
我有2个不同的应用程序:比如Application1和Application2.
我已将Application2与keycloak 集成,并且我可以使用Keycloak的登录页面登录此应用程序.
现在我想要的是,如果我登录到我的Application1(没有keycloak),我应该能够调用keycloak的一些API来登录application2(不需要渲染keycloak的登录页面).
这可行吗?如果有,怎么样?
任何帮助将受到高度赞赏.
谢谢
我们已将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
根据Google的文档,似乎只有脱机应用程序才需要刷新令牌(当用户不在时,可能会遇到过期访问令牌的应用程序).
访问令牌定期到期.如果您请求脱机访问与令牌关联的作用域,则可以刷新访问令牌而不提示用户获得权限(包括用户不存在时).
...
要求离线访问是任何需要在用户不在时访问Google API的应用程序的要求.例如,执行备份服务或在预定时间执行操作的应用程序需要能够在用户不在时刷新其访问令牌.默认访问方式称为在线.
但是,一般来说刷新令牌的描述以及特别是这个问题似乎都暗示,只要您想要请求新的访问令牌,就需要刷新令牌.
我想我会同意谷歌的解释,而不是使用刷新令牌.我对OIDC提供商的经验是,刷新的工作原理如下:
用户可能会看到一些重定向,但除了重新进行身份验证之外没有任何交互.鉴于此,如果用户总是出现在应用程序中,是否有必要使用刷新令牌?
我想使用OpenID Connect保护我们的移动应用程序的REST后端.简而言之,应用程序的用户应在通过REST后端(多个服务)获取敏感数据之前对自身进行身份验证(用户名/密码).
在初始身份验证之后,他们应该会收到一个ID /访问令牌,然后他们可以在其应用会话的剩余时间内用于服务通信.获取此ID令牌非常重要,因为它包含后端所需的信息.
作为实现此场景的Identity Provide,我想使用KeyCloak.但是,我不确定要实现的最佳身份验证流程.我读这个和这个计算器的职位,但我仍然不能确定,如果我需要的解决方案是有效的/安全/可以接受的.
从我读到的有关openID Connect的内容来看,推荐的openID Connect auth流程是"3条腿授权代码流程 ",其中包括:
对于基于浏览器的Web应用程序来说,这一切听起来都很好,但在我们的应用程序中,我们希望避免使用外部登录页面,而是拥有一个"本地"应用内登录页面,以免过多地破坏用户的体验.此外,我们的应用程序有一个功能,让您"登录".在这种情况下,用户只登录一次,然后应用程序在启动时在后台获取所有令牌.
因此,根据我们的要求,我发现了这篇博客文章,该文章使用了一个两条腿的 资源所有者凭据流程方法,该方法允许应用程序进行身份验证并在一个请求中收集令牌,而无需导航到keycloak登录页面.
我测试了这个,这个解决方案似乎提供了我们需要的功能.此外,在我们的案例中,app和KeyCloak(=自发布的OpenID提供商)仅在内部使用,属于同一法人实体.
在我们的使用案例中,是否允许使用双腿方法,如果没有,为什么不呢?这种方法是否会带来一些安全风险?
我真的希望听到你们的意见!
更新16-10-2018:哇伙计们,我从Nate Barbettini 找到了一个非常有趣的教程演示文稿(https://www.youtube.com/watch?v=996OiexHze0),其中包括oauth,openid connect和认证流程的类型在非常明确的条件下,但也非常深入.我建议所有人在使用ouath/openid connect进行复杂的授权/身份验证之前进一步冒险.
问候,
金荷兰
为了理解我可以用于OpenId Connect Server实现的内容,我已经研究了它们各自的含义:
ASP.NET Core 2的OpenID Connect和OAuth 2.0框架.
AspNet.Security.OpenIdConnect.Server:
对于两个ASP.NET核心的1.x/2.x和OWIN /卡塔纳3.X/4.x的一种先进的OAuth2/ID连接服务器框架,目的是提供一个低级别的,协议的第一种方法.
OpenIddict旨在提供一种简单易用的解决方案,以在任何ASP.NET Core 1.x或2.x应用程序中实现OpenID Connect服务器.
OpenIddict基于
AspNet.Security.OpenIdConnect.Server控制OpenID Connect身份验证流程,可以与任何成员资格堆栈一起使用,包括ASP.NET核心身份.
还检查了所有这些都使用ASP.NET Core Identity作为会员系统.
所以我目前的理解是,IdentityServer4并且OpenIdConnect.Server是解决同一问题的两个替代框架.主要区别在于受支持的ASP.NET Core版本列表.
关于Openiddict- 它是一种基于简化服务器创建的扩展AspNet.Security.OpenIdConnect.Server.
我错过了什么,或者这是一般的事情吗?
openid-connect ×10
oauth-2.0 ×5
openid ×2
asp.net-core ×1
aws-cognito ×1
c# ×1
e2e-testing ×1
keycloak ×1
logout ×1
mobile ×1
oauth ×1
oauth2 ×1
openiddict ×1
rest ×1
thinktecture ×1