小编sct*_*lsn的帖子

OAuth 2:分离资源服务器和授权服务器

OAuth 2规范让我相信"资源服务器"和"授权服务器"不一定必须是同一个应用程序,但我正在努力弄清楚这在实践中是如何实际实现的.

例如,假设存在以下应用程序:

  • 资源服务器
  • 授权服务器
  • 网络前端
  • 第三方客户端应用

场景#1:登录Web前端

  • 用户提交登录表单
  • web app将凭据POST到auth server(grant_type = password)并接收access_token
  • Web应用程序将access_token存储在会话中
  • 在每个后续请求中:
    • 从资源服务器获取资源(在授权标头中使用access_token)并在Web前端中呈现它
    • 如果我们获得401然后将用户注销(从会话中删除access_token)

场景#2:授权第三方应用

  • 用户从身份验证服务请求授权
  • 显示允许/拒绝表单
  • 用户被重定向回客户端应用程序,存在授权代码
  • 客户端应用程序将代码POST到auth服务(grant_type = authorization_code)并接收access_token
  • 客户端从资源服务器传递资源(带有Auth头)

我理解的部分是如何在方案#2中显示允许/拒绝表单之前验证用户.用户可能登录到主Web应用程序,但是auth服务不知道这一点,并且会以某种方式再次需要对用户进行身份验证.auth服务是否也需要支持登录/会话?

我想知道web应用程序是否更有意义负责显示允许/拒绝表单有两个原因:

  1. 它将所有UI保存在一个应用程序中
  2. 如果用户已登录到Web应用程序,则不会强制用户重新提交其凭据

这是方案#2的一种可能的替代方案:

  • 用户从Web应用程序请求授权
  • 显示允许/拒绝表单
  • web app POST到auth服务器创建新的授权,返回授权代码
  • Web应用程序重定向到存在授权代码的客户端应用程序
  • 客户端应用程序POST代码以授权服务并接收access_token

处理这个问题的最佳方法是什么?任何一般性意见,建议等都会很棒!

谢谢

soa authorization web-services oauth oauth-2.0

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

面向服务架构的集中式身份验证

我正在探索面向服务的基本架构,我想知道如何在整个服务中最好地处理用户身份验证.

作为一个非常简单的示例,假设我们有一个博客应用程序,可以调用其他两个服务:

  1. 用于存储用户数据和交换访问令牌凭据的用户/身份验证服务
  2. 用于管理帖子数据的帖子服务

假设应用程序的用户正在尝试删除特定帖子,并且只允许具有"admin"角色的用户这样做.

需要提出以下要求:

  • app - > auth

    验证当前用户(通过某种令牌).如果令牌过期,应用程序可以将用户重定向到登录表单等.

  • app - >帖子

    删除帖子.

  • 帖子 - > auth

    在删除帖子之前,帖子服务需要确保请求用户有权这样做.验证当前用户(通过令牌)并确保他们具有"admin"角色.

这是一个非常简单的例子,但我很好奇人们如何在他们的服务中处理auth.似乎每个服务都需要单独调用身份验证服务才能授权请求.是这样的吗?在这种SOA中是否有更好的方法来处理auth?

谢谢!

authentication soa authorization web-services

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

消息在微服务架构中

我开始研究面向服务的体系结构,并想知道如何最好地构建进程之间的消息传递.似乎服务和/或pubsub总线之间的直接HTTP调用是两种常见的方法.在哪种情况下比另一种更有利?我可以看到pubsub如何导致更多的解耦服务,但我也得到的印象是,通过系统跟踪消息的路径变得更加困难.

有什么资源可以了解更多相关信息?在非常小的"手动"服务(即Ruby/Sinatra,Node/Express,Redis pubsub等)的背景下,我对此非常好奇,而不是任何规定的SOA堆栈/套件.虽然我确信同样的原则适用.

谢谢!

service soa web-services publish-subscribe

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

没有重定向的 NGINX 自定义 404 页面

默认情况下,当 NGINX 返回 404 时,它会呈现一些默认的 HTML。例如,类似于:

<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.10.0 (Ubuntu)</center>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我想自定义此 HTML 但保持 URL 不变。我试过为 404s 设置错误页面:

error_page 404 /404.html
Run Code Online (Sandbox Code Playgroud)

但这首先将浏览器重定向到/404.html.

有没有办法在不重定向的情况下自定义 404 HTML?

nginx

8
推荐指数
1
解决办法
5895
查看次数

在iOS6中解除呈现的UINavigationController

在我的根UIViewController中,我提出了一个UINavigationController.UINavigationController最终推送另一个视图(让我们称之为MyViewController).如何从MyViewController中解除整个UINavigationController(及其推送的视图)?

从MyViewController,我试过调用[[self.navigationController presentingViewController] dismissViewControllerAnimated:NO completion:nil]但没有发生任何事情.我还尝试首先从导航控制器弹出所有视图控制器,但仍然没有解除导航控制器.

谢谢!

更新:

我已经找到导致此问题的原因,但无法解决问题.上面描述的UINavigationController是UIImagePickerController的自定义子类(我们称之为CameraController),源类型为UIImagePickerControllerSourceTypeCamera.一切都按预期工作(使用下面提供的答案),直到我cameraOverlayView在CameraController上设置自定义viewDidLoad.评论以下几行可以解决问题:

self.showCameraControls = NO;
UIView *overlay = [[[NSBundle mainBundle] loadNibNamed:@"CameraController" owner:self options:nil] objectAtIndex:0];
self.cameraOverlayView = overlay;
Run Code Online (Sandbox Code Playgroud)

objective-c uiviewcontroller uiimagepickercontroller uinavigationcontroller ios6

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