问题标签 [servicestack-auth]
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.
servicestack - ServiceStack 4.0.30 - CredentialsAuthProvider - 未在身份验证失败时设置 401 状态
我刚刚更新到 4.0.30 并注意到 /auth?username=xxxx&password=xxxx 无论用户是否成功通过身份验证都会返回 200 状态。甚至尝试使用 PostMan。由于我在最近的任何更改日志中都没有看到任何内容,如果有的话,发生了什么变化?
servicestack - 如何从 UserOAuthProviders 中仅删除一个提供者
要将社交提供者与用户帐户相关联,我们可以简单地使用api/auth/facebook
,我还发现使用auth/logout
会注销用户......
在数据库中,2 个配置文件仍然存在,所以注销是一种简单的方法来终止身份验证会话......但我怎样才能取消它们的链接?
- 有没有办法使用 API 将帐户删除/取消链接到一个社交登录?
笔记:
当我添加/Friends/Index.cshtml
View (没有控制器)时,我到了这里,因为社交登录开始“出乎意料”地工作......我在文档中没有找到任何关于此的内容,可能是个好主意重要的提示 :)
这是用oauth.<provider>.CallbackUrl
on完成的web.config
!
servicestack - 使用永久会话时,身份验证服务说未经过身份验证
使用临时会话时,它工作正常。登录 auth 服务并在不带任何参数的情况下调用 /auth,它会显示显示名称、会话 ID 等。
当我使用 RememberMe=true 登录时,该调用会正确返回会话信息。但是在随后不带任何参数调用 /auth 时,ServiceStack 返回 401 not authenticated。会话对象的 IsAuthenticated 属性为 true 并且实际存在。我的代码对此进行检查,如果它为假,则将用户转发到不会发生的登录页面,因此我知道用户确实已通过身份验证。
我没有做任何不同的事情。如何使用永久会话进行身份验证并获得对 /auth 的后续调用以确认我已登录?
如果有帮助,我正在使用 CustomCredentialsProvider。
更新:
应用主机代码:
初始请求标头:
https://****.com/api2/auth?username=user&password=passwordmberme=true
- GET /api2/auth?username=user&password=password&rememberme=true HTTP/1.1
- 接受:文本/html,应用程序/xhtml+xml,/
- 接受语言:en-US
- 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) 像 Gecko
- 接受编码:gzip,放气
- 主办方:propel.zola360.com
- DNT: 1
- 连接:保持活动
- 饼干:ss-pid=P2hslABCmSs7pomRqNz5;ss-opt=烫发;X-UAId=
初始响应标头:
- HTTP/1.1 200 正常
- 缓存控制:私有
- 内容类型:文本/html
- 内容编码:gzip
- 变化:接受编码
- 服务器:Microsoft-IIS/7.5
- X-Powered-By:ServiceStack/4.033 Win32NT/.NET
- 访问控制允许来源:*
- 访问控制允许方法:GET、POST、PUT、DELETE、OPTIONS
- Access-Control-Allow-Headers:内容类型、授权、接受
- 访问控制允许凭据:true
- X-AspNet-版本:4.0.30319
- 设置 Cookie:ss-id=pojZkNAdMcEcACDREcRM;域=.zola360.com;路径=/; HttpOnly
- 设置 Cookie:ss-opt=perm;域=.zola360.com;过期=格林威治标准时间 2034 年 11 月 13 日星期一 16:11:09;- 路径=/;HttpOnly
- 设置 Cookie:X-UAId=; 域=.zola360.com;过期=格林威治标准时间 2034 年 11 月 13 日星期一 16:11:09;路径=/; HttpOnly
- 设置 Cookie:47=0;域=.zola360.com;路径=/
- 设置 Cookie:用户 ID=47;域=.zola360.com;路径=/
- X-Powered-By: ASP.NET
- 日期:格林威治标准时间 2014 年 11 月 13 日星期四 16:11:09
- 内容长度:4129
初始响应正文:
{"userId":"47","sessionId":"PKrITmRawxAtnaABCDgN","userName":"user","responseStatus":{},"meta":{"ExpiresMinutes":"360"}}
随后调用 /auth 请求:
- 获取 /api2/auth HTTP/1.1
- 接受:文本/html,应用程序/xhtml+xml,/
- 接受语言:en-US
- 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) 像 Gecko
- 接受编码:gzip,放气
- 主办方:propel.zola360.com
- DNT: 1
- 连接:保持活动
- 饼干:ss-pid=cvgslABCmSs6pomYdLu0;ss-opt=烫发;X-UAId=; ss-id=lYWZkFAdMcZcABCDcRM; 47=0;用户 ID=47
随后调用 /auth 响应
- HTTP/1.1 401 未认证
- 缓存控制:私有
- 内容类型:文本/html
- 变化:接受
- 服务器:Microsoft-IIS/7.5
- X-Powered-By:ServiceStack/4.033 Win32NT/.NET
- 访问控制允许来源:*
- 访问控制允许方法:GET、POST、PUT、DELETE、OPTIONS
- Access-Control-Allow-Headers:内容类型、授权、接受
- 访问控制允许凭据:true
- X-AspNet-版本:4.0.30319
- X-Powered-By: ASP.NET
- 日期:格林威治标准时间 2014 年 11 月 13 日星期四 16:11:23
- 内容长度:9731
随后调用 /auth 正文:
{"responseStatus":{"errorCode":"Not Authenticated","message":"Not Authenticated","stackTrace":"[Authenticate: 11/13/2014 3:27:49 PM]:\n[REQUEST: {}]\nServiceStack.HttpError: Not Authenticated\r\n at ServiceStack.Auth.AuthenticateService.Post(Authenticate request)\r\n at lambda_method(Closure , Object , Object )\r\n at ServiceStack.Host.ServiceRunner` 1.Execute(IRequest request, Object instance, TRequest requestDto)","errors":[]}}
更新 我制作了一个小的 Python3 脚本来验证自己并调用其他一些 Web 服务。在使用 RememberMe=true 进行身份验证后,cookie 按预期返回:ss-id/pid 设置正确且 ss-opt=perm。我想我会打印标头 cookie,然后将其粘贴到另一个请求的标头中,以调用标有 [Authenticate] 的不同服务。它没有用。所以我尝试了一些愚蠢的方法并将 ss-pid cookie 值粘贴到 ss-id 中。有效。
这是失败的 cookie 字符串(会话已编辑 :)):
cookie = " ss-id=ss-ID-session-cookie ; domain=.zola360.com; path=/; HttpOnly, ss- pid=ss-PID-session-cookie ; domain=.zola360.com; expires=Tue ,2034 年 11 月 14 日 01:34:25 GMT;路径=/;HttpOnly,ss-opt=perm;域=.zola360.com;过期=周二,2034 年 11 月 14 日 01:34:25 GMT;路径= /; HttpOnly, X-UAId=; domain=.zola360.com; expires=Tue, 14-Nov-2034 01:34:25 GMT; path=/; HttpOnly, 47=0; domain=.zola360.com; path =/,用户 ID=47;域=.zola360.com;路径=/"
只需将 ss-pid 值粘贴到 ss-id 中即可:
cookie = " ss-id=ss-PID-session-cookie ; domain=.zola360.com; path=/; HttpOnly, ss- pid=ss-PID-session-cookie ; domain=.zola360.com; expires=Tue ,2034 年 11 月 14 日 01:34:25 GMT;路径=/;HttpOnly,ss-opt=perm;域=.zola360.com;过期=周二,2034 年 11 月 14 日 01:34:25 GMT;路径= /; HttpOnly, X-UAId=; domain=.zola360.com; expires=Tue, 14-Nov-2034 01:34:25 GMT; path=/; HttpOnly, 47=0; domain=.zola360.com; path =/,用户 ID=47;域=.zola360.com;路径=/"
还有我使用的 Python3 脚本:
即使 ss-opt=perm,似乎仍有一些东西在看 ss-id 的值。
nhibernate - Servicestack NHibernate Auth Repo 未配置 CurrentSessionContext
我有以下配置:
然后在其他地方我有:
这一切都适用于我的应用程序的其余部分,但是当我尝试使用与 NH auth repo 相关的任何内容时,我得到:
任何人有任何线索wha gwarn?
[更新]
在我的AppHost.Configure
方法中,我添加了以下内容:
无济于事 - 我也不知道我将如何处理它:p
我也很困惑,因为 ISessionFactory 像我的应用程序的所有其他部分一样被注入:
那么这肯定会起作用吗?
xamarin.ios - ServiceStack 客户端中缺少身份验证请求/响应 POCO
在阅读了很多关于 ServiceStack 的内容后,我认为它是一件非常漂亮的艺术品,我决定将它用于我们即将推出的 Xamarin iOS 应用程序。
当前的问题是,在为 Xamarin.iOS 安装 ServiceStack.Client 后,鉴于我已在服务中启用了身份验证和注册插件,我找不到用于注册或身份验证的请求/响应 DTO(即 POCO)主持人。
在深入研究源代码后,我发现那些请求/响应 DTO 驻留在 ServiceStack 程序集中,这是一个巨大的依赖关系,我认为我不能将它包含在我们的 iOS 应用程序中。
有办法解决吗?这些 DTO 不应该在 ServiceStack.Client.Auth 下与 ServiceStack 客户端一起提供吗?
谢谢
redis - 根据属性值检索 servicestack redis 会话对象的选择
我想更新存储在 redis 中的多个 servicestack 用户会话。我想返回所有将自定义属性设置为某个值的会话,然后我可以处理它们。目前,我拥有的最佳解决方案是这样返回所有键:
我认为这不会很好地扩展。我想做一些类似于:
redis 是否可以做到这一点,如果可以,最好使用带有 ServiceStack 的标准库。
twitter - ServiceStack Twitter 身份验证和注册
我有一个应用程序已经使用 CredentialsAuthProvider() 运行了一段时间。
今天,我想添加 twitter 和 facebook 作为人们创建帐户的选项。我已经搭好了脚手架。
端点 /api/auth/twitter 和 /api/auth/facebook 工作,我看到一旦 OAuth 过程完成,访问 /api/auth 就会创建一个用户会话但是......
在我的 UserAuthRepository (OrmLiteAuthRepository) 中没有创建用户。会话中存储的用户 ID 无效。任何用 [Authenticate] 属性修饰的方法都会导致返回 404(未找到用户)错误。
我希望使用从 Facebook 或 Twitter 获得的 First/Last/Email 创建用户。我是不是误会了什么?
服务栈 v4.0.38
authentication - 无法在 ServiceStack 中使用基本身份验证注销用户
我目前正在尝试实现 ServiceStack 的身份验证插件,但在用户登录后我无法注销用户。我从这个线程中看到:
如何在 ServiceStack 中注销经过身份验证的用户?
你应该能够提出请求auth/logout
。但是,此时我仍处于登录状态。我也尝试以无效用户身份登录,/auth?username=&password=
但无济于事。
奇怪的是,这些方法在极少数情况下对我有用,但我还没有找到原因。任何帮助,将不胜感激。
更新:
我刚刚在 Fiddler 中尝试了上述请求,并注意到我返回了 401。我想在尝试以无效用户身份登录时应该可以预料到,但为什么注销请求会出现这种情况?
rest - ServiceStack 在一个登录时验证两个 iOS 应用程序
我正在使用很棒的 ServiceStack 来实现我的 REST 后端,它为两个用 Xamarin 编写的 iPhone 应用程序提供服务。一切都很好,但是当两个应用程序安装在同一台设备上时,我很难让会话正常工作!
问题是,如果我登录其中一个应用程序,第二个应用程序将通过身份验证,并且由于下面的“isCurrentUserAuthenticated()”方法而不需要我登录。
我将 cookie 与我的请求一起传递以模仿浏览器并确保用户不必每次都传递他的凭据,但我猜问题是 ServiceStack 可能会看到来自同一 IP 的两个身份验证请求,因此它使用第一个对它们进行身份验证身份验证请求成功。
注意:这两个应用程序访问相同的数据库和 UserAuth 表,但每个应用程序都支持不同的用户角色。
修复它的唯一方法是从第二个应用程序中注销,以便用户可以使用他的凭据再次登录以使一切正常。
你能帮忙吗?
这是到目前为止的代码:
asp.net - 是否可以在没有共享会话状态存储的情况下跨网络场启用 ServiceStack 身份验证?
使用 ASP.NET Forms 身份验证,可以将 webfarm 中的所有服务器设置为共享相同的机器密钥以加密身份验证票证,这意味着如果您可以在应用程序中不需要会话状态的情况下轻松扩展到 web 场.
即,http://www.iambacon.co.uk/blog/getting-asp-net-authentication-to-work-on-a-web-farm
有没有一种方法可以使用 ServiceStack 身份验证来完成这种断开连接的设置,或者实现是否需要将共享会话状态保存在所有 Web 服务器都可以访问的某个地方?我假设需要共享状态,但如果有办法解决它,有兴趣了解更多......(我们在全球范围内进行负载平衡,因此共享状态更具挑战性)