【发布时间】:2018-02-12 12:59:50
【问题描述】:
我是实施 OAuth 2.0 的新手。我已经在我的 xamarin 项目中实现了网络参考(ASMX 文件)。现在我需要实现 OAuth 2.0 进行身份验证。但我不确定 ASMX 是否支持 OAuth2.0。我是否需要实现 WCF 而不是 Web 引用 (ASMX) 或者是否可以在 Web 引用 (ASMX) 中实现 OAuth2.0?
【问题讨论】:
标签: c# wcf xamarin oauth-2.0 asmx
我是实施 OAuth 2.0 的新手。我已经在我的 xamarin 项目中实现了网络参考(ASMX 文件)。现在我需要实现 OAuth 2.0 进行身份验证。但我不确定 ASMX 是否支持 OAuth2.0。我是否需要实现 WCF 而不是 Web 引用 (ASMX) 或者是否可以在 Web 引用 (ASMX) 中实现 OAuth2.0?
【问题讨论】:
标签: c# wcf xamarin oauth-2.0 asmx
一种可能的解决方案是将从授权获取的令牌添加到授权标头。 您的代码可能类似于:
var redirectURI = Windows.Security.Authentication.Web.WebAuthenticationBroker.GetCurrentApplicationCallbackUri();
var _authContext = new AuthenticationContext(authority);
var tokenResult = await _authContext.AcquireTokenAsync(serviceResourceId, clientId, redirectURI);
if (tokenResult.Status != AuthenticationStatus.Success)
{
//Not authenticated
return;
}
var svc = new YourServiceReference.YourClient();
using (var scope = new OperationContextScope(svc.InnerChannel))
{
var httpRequestProperty = new HttpRequestMessageProperty();
httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = tokenResult.AccessToken;
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
var result = svc.MyFunction();
//Do something with the data
}
【讨论】:
棘手 - 这就是移动 OAuth 解决方案的工作方式 - 但这是一项艰巨的工作:
解决方案部分
API: ASMX 是一项古老的技术,因此如果您使用 Microsoft 堆栈,您会使用更新的技术,例如 .Net Core Web API
移动应用程序:解决方案中更难的部分是实施移动 SSO,如果您还没有这样做的话。
这种解决方案有多少已经存在?
【讨论】: