gpt4 book ai didi

c# - WebAuthenticationBroker 使用 LiveID 进行身份验证返回成功状态但没有安全 token

转载 作者:太空宇宙 更新时间:2023-11-03 11:16:47 25 4
gpt4 key购买 nike

我正在使用 ACS 在 Windows 8 应用程序中进行身份验证。我观察到的正是我所期望的,因为 UI 显示了身份验证对话框,并且在成功输入我的 LiveID 凭据后,我返回到我的代码并显示成功状态,但我没有收到安全 token ,我只是在 result.ResponseData 中获取“https://XXXXX.accesscontrol.windows.net/v2/wsfederation?wa=wsignin1.0”

代码如下:

  string loginUriString = "https://XXXXX.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&wtrealm=http%2f%YYYYY.cloudapp.net";
string redirectUriSting = "https://XXXXX.accesscontrol.windows.net:443/v2/wsfederation";

string authToken;
bool IsAuthenticated = false;

private async Task AuthenticateAsync()
{
var requestUri = new Uri(loginUriString, UriKind.RelativeOrAbsolute);

var redirectUri = new Uri(redirectUriSting, UriKind.RelativeOrAbsolute);

//var testUri = WebAuthenticationBroker.GetCurrentApplicationCallbackUri();

var result = await WebAuthenticationBroker.AuthenticateAsync(
WebAuthenticationOptions.None,
requestUri,
redirectUri);

if (result.ResponseStatus != WebAuthenticationStatus.Success)
throw new Exception(string.Format("Login failed : {0}", result.ResponseErrorDetail));

//authToken = ExtractTokenFromResponse(result.ResponseData);

//if (!string.IsNullOrEmpty(authToken))
//{
_client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("OAuth", result.ResponseData);

IsAuthenticated = true;
//}
}

我在这里看到了另一个 SO 问题,似乎是一个类似的问题,但没有别的。我是不是搞错了什么?

最佳答案

WebAuthenticationBroker 只是继续浏览,直到下一个请求的页面是 callbackUri 参数指定的页面。届时它会将最终 URL 返回给您,因此如果您想要取回任何内容,则需要在该 URL 中对其进行编码。

在依赖方的 ACS 控制面板中,您需要指定站点某处的返回 URL。例如 https://YYYYY.cloudapp.net/federationcallback。然后创建一个 Controller 来处理接受该 URL 的帖子。该帖子将有一个表单字段 wresult,它是一些包含从 ACS 返回的 token 的 xml。

然后您可以通过重定向到 https://YYYYY.cloudapp.net/federationcallback/end?token={whatever you want to return} 将 token 发送回 WebAuthenticationBroker/

然后您需要将身份验证代理的用法更改为以下内容:

var webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(
WebAuthenticationOptions.None,
new Uri("https://XXXXX.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&wtrealm=http%3a%2f%2fYYYYY.cloudapp.net%2f"),
new Uri("https://YYYYY.cloudapp.net/federationcallback/end")
);

// The data you returned
var token = authenticateResult.ResponseData.Substring(authenticateResult.ResponseData.IndexOf("token=", StringComparison.Ordinal) + 6);

关于c# - WebAuthenticationBroker 使用 LiveID 进行身份验证返回成功状态但没有安全 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12455692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com