1

太多间接层,它让我感到困惑。请解释WebAuthenticationBroker

在一个正常的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"; 

但是好像经纪人能够确定用户是否是合法的W/O进行了一趟自己的服务器。正如以下行所示:

if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success) 

这是甚么安全吗?

  1. 服务器不应该解密吗?
  2. 对于这个问题,你的服务器不应该启动连接?这样它可以发送一些随机比特到盐,所以Facebook可以确保返回令牌?

是否重定向URI完全是任意的,然后,代理实质上解析出IP(身份提供商)的响应。

是否有一些第三方服务器在过程中涉及例如。 MS自己的服务器,使我不知道这可能吗?

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

回答

4

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

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

  1. 授权码流
  2. 隐含补助流

在#1,你有3件:你的服务器上,授权服务器(如Facebook)和浏览器。在这个流程中,access_token是在你的服务器和AS之间协商的,而浏览器是一个中介。 (更多详细信息在this article中描述)

在#2中,access_token是在浏览器(或嵌入本机应用程序的浏览器)和AS直接协商之后。没有秘密存储在任何地方(如在流程#1中)。当浏览器试图导航到此地址

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

:(A summary here

response_type=token

access_token所示你的例子是使用#2通常返回形式的URL WebAuthenticationBroker将中断导航并调用您的代码。然后,您将提取access_token并执行您的应用对AS(或您的API)所做的任何操作。

This sample显示了如何使用它(与我们自己的AS,但你可以很容易地推广到任何AS)。

注:access_tokens通常是不透明的实体。没有加密或签名或任何东西。 MORE现代系统将返回一个Json Web Token,这确实有意义和内容并且被数字签名。在上面的示例中,除了access_token之外,您还会看到另外一个id_token参数。这是一个智威汤逊。

+0

谢谢。我也得出了同样的结论。如果您没有自己的服务,那么获得令牌只是一件好事。 (也就是说,您的应用完全依赖第三方服务) – Alwyn