【问题标题】:Please Explain WebAuthenticationBroker请解释 WebAuthenticationBroker
【发布时间】:2013-10-20 18:05:08
【问题描述】:

间接层太多,这让我很困惑。

在正常的 OAuth 中,最后一站通常需要使用稍后将通过公钥解密的授权令牌发回依赖方(也称为服务器)。

目前我看到的唯一例子是这样的:

String FacebookURL = "https://www.facebook.com/dialog/oauth?client_id=" + FacebookClientID.Text + "&redirect_uri=" + Uri.EscapeUriString(FacebookCallbackUrl.Text) + "&scope=read_stream&display=popup&response_type=token";

但是,代理似乎能够确定用户是否合法而无需访问您自己的服务器。如以下行所示:

if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)

那怎么安全?

  1. 服务器不应该做解密吗?
  2. 就此而言,您的服务器不应该启动连接吗?这样,它可以向 salt 发送一些随机位,以便 facebook 可以保护返回令牌?

那么重定向 URI 是否完全是任意的,代理本质上是解析来自 IP(身份提供者)的响应。

是否有一些第三方服务器参与该过程,例如。 MS 自己的服务器使这成为可能,我不知道?

如果重定向 URI 应该是指向我自己的服务的 URI,那么我该如何处理和响应请求?

【问题讨论】:

    标签: authentication windows-runtime oauth-2.0 winrt-xaml restful-authentication


    【解决方案1】:

    WebAuthenticationBroker 只是自动查找特定 URL 以在身份验证完成时导航到并取消它以提取 access_token 的常用技术。这主要用于具有嵌入式浏览器的移动应用程序。不涉及任何服务器(授权服务器除外)。

    OAuth2 中有 2 个常用的身份验证流程:

    1. 授权码流程
    2. 隐式授权流程

    在 #1 中,您有 3 个部分:您的服务器、授权服务器(例如 Facebook)和浏览器。在这个流程中,access_token 在你的服务器和 AS 之间协商,浏览器是一个中介。 (更多细节在this article中描述)

    在#2 中,access_token 在浏览器(或嵌入在本机应用程序中的浏览器)和 AS 之间直接协商。任何地方都没有存储秘密(如流程#1)。 (A summary here)

    您的示例使用#2,如response_type=token所示

    access_token 通常以如下形式的 URL 返回:

    http://{callback}/#access_token={the access token}
    

    当浏览器尝试导航到该地址时,WebAuthenticationBroker 将中断导航并调用您的代码。然后,您将提取 access_token 并执行您的应用对 AS(或您的 API)所做的任何事情。

    This sample 展示了如何使用它(使用我们自己的 AS,但您可以轻松地将其推广到任何 AS)。

    注意:access_tokens 通常是不透明的实体。没有加密或签名或任何东西。更多现代系统将返回一个Json Web Token,它确实具有意义和内容,并且经过数字签名。在上面的示例中,您将看到除了access_token 之外还有一个id_token 参数。那是 JWT。

    【讨论】:

    • 谢谢。我也得出了同样的结论。只有在您没有自己的服务时才能获得令牌。 (又名。您的应用完全依赖于 3rd 方服务)
    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多