验证 SWT 令牌 REST WCF 服务

2024-05-29

我目前正在开发一个 WPF 客户端,该客户端从 Windows Azure AppFabric ACS 获取 SWT 令牌。有了这个令牌,我想使用 RESTful WCF 服务。 我用了本教程 http://blogs.msdn.com/b/alikl/archive/2011/09/12/obtaining-swt-security-token-from-windows-azure-appfabric-acs-in-wpf-application-using-webbrowser-control.aspx获得 SWT 令牌,效果完美。在...的帮助下这个 MSDN 教程 http://msdn.microsoft.com/en-us/library/hh289317.aspx我创建了 RESTful WCF 服务。

问题是令牌可能有错误的格式,因为令牌验证器无法验证它(Error in theIsHMACValid令牌验证器的方法,swtWithSignatur.Length == 1)。

我用来联系服务器的令牌示例:

{"appliesTo":"http://localhost:7100/Service/Default.aspx","context":null,"created":1326996221,"expires":1326999821,"securityToken":"<?xml version="1.0" encoding="utf-16"?><wsse:BinarySecurityToken wsu:Id="uuid:74ba5667-04ea-4074-9544-aaafb570c648" ValueType="http://schemas.xmlsoap.org/ws/2009/11/swt-token-profile-1.0" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">aHR0cCUzYSUyZiUyZnNjaGVtYXMueG1sc29hcC5vcmclMmZ3cyUyZjIwMDUlMmYwNSUyZmlkZW50aXR5JTJmY2xhaW1zJTJmZW1haWxhZGRyZXNzPXBhdHJpY2suZWNrZXIlNDBnbWFpbC5jb20maHR0cCUzYSUyZiUyZnNjaGVtYXMueG1sc29hcC5vcmclMmZ3cyUyZjIwMDUlMmYwNSUyZmlkZW50aXR5JTJmY2xhaW1zJTJmbmFtZT1QYXRyaWNrK0Vja2VyJmh0dHAlM2ElMmYlMmZzY2hlbWFzLnhtbHNvYXAub3JnJTJmd3MlMmYyMDA1JTJmMDUlMmZpZGVudGl0eSUyZmNsYWltcyUyZm5hbWVpZGVudGlmaWVyPWh0dHBzJTNhJTJmJTJmd3d3Lmdvb2dsZS5jb20lMmZhY2NvdW50cyUyZm84JTJmaWQlM2ZpZCUzZEFJdE9hd2xzM1doNlgwRFJ6d1BsdzU2a1R0WURmLVNNaDZxZFJtQSZodHRwJTNhJTJmJTJmc2NoZW1hcy5taWNyb3NvZnQuY29tJTJmYWNjZXNzY29udHJvbHNlcnZpY2UlMmYyMDEwJTJmMDclMmZjbGFpbXMlMmZpZGVudGl0eXByb3ZpZGVyPUdvb2dsZSZBdWRpZW5jZT1odHRwJTNhJTJmJTJmbG9jYWxob3N0JTNhNzEwMCUyZlNlcnZpY2UlMmZEZWZhdWx0LmFzcHgmRXhwaXJlc09uPTEzMjY5OTk4MjEmSXNzdWVyPWh0dHBzJTNhJTJmJTJmZmhiYXlhenVyZW5zLmFjY2Vzc2NvbnRyb2wud2luZG93cy5uZXQlMmYmSE1BQ1NIQTI1Nj1SUnN3OUJTSlc2ZFJ0MjJyNkNkcjZWZHpyJTJicTF6MHlhV0FMNVdlJTJiJTJmV3owJTNk</wsse:BinarySecurityToken>","tokenType":"http://schemas.xmlsoap.org/ws/2009/11/swt-token-profile-1.0"}

在 Windows Azure 管理门户中我选择了SWT作为我的依赖方应用程序的令牌格式。 根据第一个教程,SWT 令牌的格式看起来不错,但令牌验证器不会接受它。

PS:如果有人正在尝试第二个教程(如何:使用 ACS 对部署到 Windows Azure 的 REST WCF 服务进行身份验证): 我认为第3步中的第11点有错误,你必须修改web.config文件(system/webService部分不存在)。配置应该如下所示:

<?xml version="1.0"?>
<configuration>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="SWTModule" type="SecurityModule.SWTModule, SecurityModule" />
    </modules>
  </system.webServer>
</configuration>

我发送到服务器的令牌格式错误。 上面的 token 是 json 格式,包含一个 'securityToken',它是 xml 编码的。和HttpUtility.UrlDecode and XMLReader可以检索 base64 字符串。上述token的base64字符串为:

aHR0cCUzYSUyZiUyZnNjaGVtYXMueG1sc29hcC5vcmclMmZ3cyUyZjIwMDUlMmYwNSUyZmlkZW50aXR5JTJmY2xhaW1zJTJmZW1haWxhZGRyZXNzPXBhdHJpY2suZWNrZXIlNDBnbWFpbC5jb20maHR0cCUzYSUyZiUyZnNjaGVtYXMueG1sc29hcC5vcmclMmZ3cyUyZjIwMDUlMmYwNSUyZmlkZW50aXR5JTJmY2xhaW1zJTJmbmFtZT1QYXRyaWNrK0Vja2VyJmh0dHAlM2ElMmYlMmZzY2hlbWFzLnhtbHNvYXAub3JnJTJmd3MlMmYyMDA1JTJmMDUlMmZpZGVudGl0eSUyZmNsYWltcyUyZm5hbWVpZGVudGlmaWVyPWh0dHBzJTNhJTJmJTJmd3d3Lmdvb2dsZS5jb20lMmZhY2NvdW50cyUyZm84JTJmaWQlM2ZpZCUzZEFJdE9hd2xzM1doNlgwRFJ6d1BsdzU2a1R0WURmLVNNaDZxZFJtQSZodHRwJTNhJTJmJTJmc2NoZW1hcy5taWNyb3NvZnQuY29tJTJmYWNjZXNzY29udHJvbHNlcnZpY2UlMmYyMDEwJTJmMDclMmZjbGFpbXMlMmZpZGVudGl0eXByb3ZpZGVyPUdvb2dsZSZBdWRpZW5jZT1odHRwJTNhJTJmJTJmbG9jYWxob3N0JTNhNzEwMCUyZlNlcnZpY2UlMmZEZWZhdWx0LmFzcHgmRXhwaXJlc09uPTEzMjY5OTk4MjEmSXNzdWVyPWh0dHBzJTNhJTJmJTJmZmhiYXlhenVyZW5zLmFjY2Vzc2NvbnRyb2wud2luZG93cy5uZXQlMmYmSE1BQ1NIQTI1Nj1SUnN3OUJTSlc2ZFJ0MjJyNkNkcjZWZHpyJTJicTF6MHlhV0FMNVdlJTJiJTJmV3owJTNk

我解码了这个字符串并获得了我的 ACS 令牌。此 ACS 令牌现在有效,并且可以使用我的 RESTful WCF 服务。

服务器端的代码没有改变。这是我在客户端得到的:

// parse the token from the json string, 
var token = JsonNotifyRequestSecurityTokenResponse.FromJson(txtReceivedToken.Text);
// get the security token and decode it
string xmlString = HttpUtility.UrlDecode(token.SecurityTokenString);
// get the base64 string an
string string64 = "";
using (XmlReader xmlReader = XmlReader.Create(new StringReader(xmlString))) {
  while (xmlReader.Read()) {
    if (xmlReader.NodeType == XmlNodeType.Text) { // find the first text element, which should be the base64 string
      string64 = xmlReader.Value;
      break;
    }
  }
}
// decode it
string acsToken = base64Decode(string64);

// set the header
string headerValue = string.Format("WRAP access_token=\"{0}\"", acsToken);
client.Headers.Add("Authorization", headerValue);
Stream stream = client.OpenRead(@"http://127.0.0.1:81/Service1.svc/users");

StreamReader reader = new StreamReader(stream);
String response = reader.ReadToEnd();

The base64Decode我“偷”的方法http://www.vbforums.com/showthread.php?t=287324 http://www.vbforums.com/showthread.php?t=287324. The JsonNotifyRequestSecurityTokenResponse.FromJson我得到的部分http://www.leastprivilege.com/ http://www.leastprivilege.com/,但我认为它可以用任何可用的 JSON 解析器进行解析。

我不知道这是否是最好的解决方案,但它对我有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证 SWT 令牌 REST WCF 服务 的相关文章

随机推荐

  • git 的精简包是什么?

    我还没有找到太多关于瘦包的信息 并且手册页的信息对此相当含糊 我知道这与连接速度慢有关 但是什么是 连接速度慢 它的优点和缺点是什么 什么时候应该使用它 什么时候不应该使用它 根据记录 手册页 index pack https www gi
  • 依赖遍历器挂起

    当 my xll 插件加载到我的客户端 PC 上时 我遇到了问题 它在启动时使 Excel 崩溃 可能是因为缺少依赖的 dll 我知道可以在配置文件模式下使用 dependency walker 来找出 exe 运行时加载了哪些 dll 当
  • 从 ios 应用程序到 symfony2 Web 应用程序的登录和管理会话

    我使用 Symfony2 开发了一个 Web 应用程序 我用过FOS用户包用于用户管理和安全 现在 我正在考虑为我的网络开发一个本机 iOS 应用程序 但并不真正知道如何解决从应用程序创建会话的问题 并在整个交互用户应用程序中维护它 换句话
  • 我在 Facebook 上的“access_token”是“不正确的值”

    我正在使用 django rest auth 它是 Django all auth 的 API 扩展 我正在构建一个可以使用 Facebook 令牌注册 登录的移动应用程序 网址 http localhost 8000 rest auth
  • Caffe 多输入图像

    我正在考虑实现一个 Caffe CNN 它接受两个输入图像和一个标签 后来可能是其他数据 并且想知道是否有人知道 prototxt 文件中执行此操作的正确语法 它只是一个带有额外顶部的 IMAGE DATA 层吗 或者我应该为每个层使用单独
  • 使用 joblib 加载 pickled scikit-learn 模型时出现 KeyError

    我有一个对象 其中包含两个scikit learn模型 一个IsolationForest and a RandomForestClassifier 我想对其进行 pickle 然后将其解开并用于生成预测 除了两个模型之外 该对象还包含几个
  • 将标记和琐事映射到行号

    我正在尝试使用 Roslyn 将标记和琐事映射到行号 这是我在下面 Kevin Pilch Bisson 的帮助下的最新尝试 public class CSharpSlocAnalyser ISlocAnalyser public long
  • 使用react redux获取删除请求方法不删除

    我正在尝试使用 fetch 删除请求方法来使用 React redux 删除本地主机服务器中的项目 调用方法 deleteItem e e preventDefault const id this props id this props d
  • 如何将 .ipa 转换为 .app 文件?

    每个人 我有一些 ipa 文件 想要转换为包含 app 包的存档文件 我试图这样做 但我没有办法 有什么办法可以做到这一点吗 请帮我 将 ipa 重命名为 zip 然后提取即可
  • 如何找到此链接器错误的原因?

    经过漫长的重命名项目的过程后 我的 DLL 项目将无法在调试模式下构建 发布构建工作 MSVCRTD lib msvcr90d dll error LNK2005 CrtDbgReportW already defined in LIBCM
  • App Engine 接受编码

    在APP Engine API中 提到如果请求带有 Accept Encoding 设置后 它会自动压缩响应 但是当我查看请求时 标头不存在 但在浏览器中 它已设置 当我尝试显式设置标题时 使用jQuery ajax http api jq
  • 我可以覆盖可绘制形状的某些属性吗?

    我有两个按钮 它们的形状相同 只是颜色不同 b1 xml
  • Jquery 文件上传 - 如何限制上传的文件数量

    我正在尝试从 blueimp 进行 Jquery 文件上传 该文档说我应该能够使用 maxNumberOfFiles 设置限制要上传的文件数量 然而 这似乎不适用于我的情况 其他诸如acceptFileTypes loadImageMaxF
  • 下面的代码片段中 C++ 标准中的哪些位置不允许使用“a = b + {1, 2}”? [复制]

    这个问题在这里已经有答案了 标准中的位置是a b 1 2 下面不允许 class complex double re im public complex double r double i re r im i complex operato
  • Numpy 导入失败

    在 RPi2 上 我使用 pip review 升级了所有软件包 但 numpy 不再工作 我尝试通过 pip 和 apt 卸载并重新安装 numpy 但我没有运气 Apt 安装 numpy 1 12 1 如果我尝试安装它不会通过 pip
  • 如何检查SparkContext是否已停止?

    如何检测是否SparkContext http spark apache org docs latest programming guide html已经stopped https spark apache org docs latest
  • 在将视图添加到 ViewGroup 之前,在后台线程中创建和修改视图是否安全?

    我有很多线性布局的视图需要创建 我创建了一个后台线程 它循环遍历所有数据并创建视图数组列表 在线程末尾 它调用 runOnUIThread 来循环遍历数组列表并将每个视图添加到线性布局中 这危险吗 当我在后台线程中创建和操作视图时 这些视图
  • 我可以获取 JAVA 语句中“gradle.properties”中定义的属性吗?

    我定义了一个属性gradle properties文件如下 user password mypassword 我可以在 java 语句中将它用作变量值吗 是的 您可以 但这不是一个好主意 也不是一个好的做法 gradle propertie
  • Python替换多个字符串同时支持反向引用

    有一些好方法 https stackoverflow com questions 6116978 python replace multiple strings处理 python 中的同时多字符串替换 但是 我在创建一个高效的函数来实现这一
  • 验证 SWT 令牌 REST WCF 服务

    我目前正在开发一个 WPF 客户端 该客户端从 Windows Azure AppFabric ACS 获取 SWT 令牌 有了这个令牌 我想使用 RESTful WCF 服务 我用了本教程 http blogs msdn com b al