【发布时间】:2015-09-20 22:07:41
【问题描述】:
我正在尝试导航到 Microsoft Live oauth authentication 页面,以便我可以授权我的用户并获取一个令牌供应用程序使用。当我使用以下NSURL 字符串时,我可以导航到该站点并授权我的应用程序,检索令牌。
let stringUrl = "https://login.live.com/oauth20_authorize.srf?client_id=\(clientId)&scope=\(scope)&response_type=code"
let url = NSURL(string: stringUrl)!
但是,我想重定向回我的应用(使用 SFSafariViewController)。为此,我在我的应用程序中添加了一个 URL Scheme,并将其作为 URL 中的 redirect_uri 传递。
let stringUrl = "https://login.live.com/oauth20_authorize.srf?client_id=\(clientId)&scope=\(scope)&response_type=code&redirect_uri=Lifestream://onedrive-oauth-callback"
let url = NSURL(string: stringUrl)!
但是,实时登录站点给了我一个错误,说出现了问题并且无法继续。在显示 oauth 登录页面之前发生此错误。它在导航到 URL 时立即发生。
我是否错误地创建了我的 URL 方案,或者不正确地将方案传递给了重定向 uri?我很困惑为什么没有redirect_uri它可以正常工作,但是当我提供它时网站无法加载。
有人可以指出我应该如何将我的应用程序的重定向 URL 传递到 oauth 重定向中吗?
更新
Microsoft 似乎不允许您注册作为应用 URL 方案的重定向 URL。我不知道如何将这些信息返回到我的应用程序中,除了支付一个我可以指向 MSFT 的网站之外,它只会为我重定向到应用程序中。
【问题讨论】:
-
对我来说,这听起来像是 Microsoft 无法识别您的重定向 URI。您是否向 Microsoft 注册了该重定向 URI? OAuth 2 规范指出,如果重定向 URI 未被识别,则授权流程应该停止并且 AP 显示失败消息 (see section 4.1.2.1)。我之前没有使用过 Microsoft 的 OAuth 服务(也没有使用过 App URL 方案),因此如果 Microsoft 不允许您将自定义 URI 注册为重定向 URI,我无法提供任何其他建议。
-
请注意,无法识别的重定向 URI(显然还有客户端 ID)在某种程度上是独特的验证失败,因为它们是唯一两个不允许将错误发送到重定向端点的条件。通常,如果出现问题,您会返回一个错误代码,您的客户端应用程序可以决定如何处理它。由于 OAuth 提供者无法验证重定向 URI,因此他们不向其发送错误信息是有意义的,因为这可能会允许第三方出于恶意目的切换重定向 URI。
-
谢谢,我看看能不能注册一下。如果没有,我将不得不看看其他人如何使用 oauth 和应用 URL 方案处理这些事情
-
查看我的 Microsoft 设置后,确实看起来他们不支持 App URL 方案。我用它的屏幕截图更新了我的 OP。那我得想办法了
-
这是我的一个有根据的猜测,但我猜要走的路是将 Web 服务器注册为您的重定向端点,并让它接受重定向并将它们转换为您的自定义 URL。我觉得这是一个不充分的描述,但已经晚了,这是我现在能做的最好的。