5

我正在开发一个使用 MS Azure 访问控制服务进行身份验证的 REST 服务。如果这些示例有任何指示,那么以这种方式保护 REST 服务的典型方法是为受保护的服务提供全局用户名和密码、私钥或 X.509 证书。但是,我想在移动设备上使用类似于以下流程的被动用户登录机制:

  1. 未经身份验证的用户尝试从应用程序访问受保护的服务
  2. 移动应用重定向到浏览器应用(或嵌入式浏览器)
  3. 用户从 ACS 登录页面选择用于登录的身份提供商(facebook、google 等)
  4. 用户输入身份提供者的凭据
  5. 浏览器重定向回应用程序
  6. 应用程序以某种方式获取 SWT 令牌以用于后续 REST 请求。

我被困在第 5 步——获取 SWT 令牌,而我发现的现有示例似乎并没有解决这种情况。此外,我实际上正在尝试使用 WPF 中的桌面客户端构建概念验证,这可能会使事情复杂化。任何人都可以建议使用每用户身份验证与每服务的特定教程或追求路径吗?谢谢。

编辑: 随着我深入研究,我意识到下面发布的示例(以及大多数其他示例)基于 OAuth WRAP,它已被弃用,取而代之的是 OAuth 2.0。任何人都可以建议更新的参考吗?谷歌搜索出现了http://blogs.msdn.com/b/adventurousidentity/archive/2011/09/18/acs-v2-oauth-2-0-delegation-support-explained.aspxhttp://connect。 microsoft.com/site116​​8/Downloads/DownloadDetails.aspx ?DownloadID=32719但它们不是最直观的。

4

2 回答 2

3

您应该查看 ACS Windows Phone 示例:

http://msdn.microsoft.com/en-us/library/gg983271.aspx

在这里,您将使用 WPF,而不是使用 Silverlight。大多数代码应该是可重用的。请注意,由于您使用的是 WPF,因此您需要为脚本注册自己的对象,例如:

[ComVisibleAttribute(true)]
public class NotifyHandler
{
    public void Notify(string notifyString)
    {
        // Here I have the token.
    }
}

this.webBrowser1.ObjectForScripting = new NotifyHandler();

更新:

上面的示例使用 OAuth Wrap 联系安全服务。如果您想使用 OAuth2,您应该更改“授权”标头设置的方式:

OAuth WRAP 案例:

 WebClient client = new WebClient();
 client.Headers["Authorization"] = "OAuth " + _rstrStore.SecurityToken;

OAuth2案例:

 WebClient client = new WebClient();
 client.Headers["Authorization"] = string.Format("OAuth2 access_token=\"{0}\"", token);

您可以使用“简单服务”示例作为在 REST 服务中实现令牌验证的指南:

http://msdn.microsoft.com/en-us/library/gg185911.aspx

然而,如果您想实现更完整的示例,您可以查看 CTP 1.4 版中如何保护 CustomerInformationService:

https://connect.microsoft.com/site116​​8/Downloads/DownloadDetails.aspx?DownloadID=35417

于 2011-10-04T00:11:09.623 回答
0

看看这个:

带有 Live ID、Facebook、Google、Yahoo!、Open ID 的 WPF 应用程序 http://social.technet.microsoft.com/wiki/contents/articles/4656.aspx

于 2011-10-04T05:42:02.427 回答