太多的间接层,让我感到困惑。
在正常的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)
这怎么样都安全?
重定向URI是否完全是任意的,其中代理实质上解析了来自IP(身份提供者)的响应。
是否有一些第三方服务器参与了该过程,例如。 MS自己的服务器使我不知道这个可能吗?
如果重定向URI应该是指向我自己的服务的URI,那么我该如何处理和响应请求?
答案 0 :(得分:4)
WebAuthenticationBroker
只是自动执行查找特定URL以导航到身份验证完成时的常用技术,并取消它以提取access_token
。这主要用于具有嵌入式浏览器的移动应用程序。没有涉及服务器(授权服务器除外)。
OAuth2中有2个经常使用的身份验证流程:
在#1中,您有3件:您的服务器,授权服务器(例如Facebook)和浏览器。在此流程中,access_token在您的服务器和AS之间协商,浏览器是中介。 (更多细节在this article)
中描述在#2中,access_token
在浏览器(或本机应用程序中嵌入的浏览器)与AS之间直接协商。任何地方都没有秘密存储(如流程#1)。 (A summary here)
您的示例使用#response_type=token
access_token
通常在以下格式的网址中返回:
http://{callback}/#access_token={the access token}
当浏览器尝试导航到此地址时,WebAuthenticationBroker
将中断导航并调用您的代码。然后,您将提取access_token
并执行您的应用对AS(或您的API)所做的任何事情。
This sample显示了如何使用它(使用我们自己的AS,但您可以轻松地将其推广到任何AS)。
注意:
access_tokens
通常是不透明的实体。没有加密或签名或任何东西。 MOre现代系统将返回Json Web Token
,其具有含义和内容并经过数字签名。在上面的示例中,除了id_token
之外,您还会看到access_token
参数。那是JWT。