如何使用Azure ACS开发用户身份验证的REST服务

sno*_*ort 5 oauth azure oauth-2.0 acs

我正在开发一个使用MS Azure访问控制服务进行身份验证的REST服务.如果示例是任何指示,则以这种方式保护REST服务的典型方法是为受保护服务提供全局用户名和pw,私钥或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但它们并不是最直观的.

Ata*_*can 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();
Run Code Online (Sandbox Code Playgroud)

更新:

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

OAuth WRAP 案例:

 WebClient client = new WebClient();
 client.Headers["Authorization"] = "OAuth " + _rstrStore.SecurityToken;
Run Code Online (Sandbox Code Playgroud)

OAuth2案例:

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

您可以使用“简单服务”示例作为指南,在 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