我们有客户要求使用仅共享点应用程序模型对共享点进行在线身份验证。通过向 Microsoft Azure ACS 发布请求来获取访问令牌,” https://accounts.accesscontrol.windows.net/cde6fa59-abb3-4971-be01 -2443c417abcd/tokens/OAuth/2”,使用 postman 工具在请求正文中包含 client_credentials。
访问令牌过期后,如何获取刷新令牌?
从上面的请求中,我们只获得访问令牌。我们是否有一个单独的端点来检索刷新令牌。
我目前正在开发一个WPF客户端,它从Windows Azure AppFabric ACS获取SWT令牌.有了这个令牌,我想使用RESTful WCF服务.我使用本教程获取SWT令牌,它完美无缺.在这个MSDN教程的帮助下,我创建了RESTful WCF服务.
问题是令牌可能具有错误的格式,因为令牌验证器无法验证它(IsHMACValid令牌验证器的方法中的错误,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>
Run Code Online (Sandbox Code Playgroud) 我正在使用Azure ACS并将其合并到我的.NET 4.0网站的SSO策略中.我在规则组页面上看到,可以存储一堆不同的声明并将其传递回RP(例如国家,街道地址,电话等).您似乎还可以返回要创建的任何声明类型.这让我想到了许多与为用户存储信息有关的问题:
我们正在尝试使用ACS示例4(来自http://claimsid.codeplex.com/)作为ADFS项目的模板.对ADFS身份验证服务的被动请求没有问题.在示例中,联合提供程序是自定义STS,并且示例工作正常.
现在我们希望用自己的ADFS替换自定义联合提供程序(示例中的Adatum FP).
我们现在的设置如下(隐藏名称空间)
ServiceClient想要调用服务,并且从配置中知道它必须从IP(Services.Authentication)获取令牌.然后将令牌传递给ADFS,ADFS验证令牌并将新令牌发送回ServiceClient.客户端new将FP令牌传递给服务,并且服务(作为ADFS上的依赖方)根据ADFS验证令牌,并执行服务方法.
问题:
用ADFS替换示例中的STS似乎打破了集成.我们似乎正在从IP中正确获取令牌,但是在将IP令牌传递给ADFS时遇到了问题.看来我们的Audience Uri有问题,但我们补充道
https://'adfs fqdn'/ adfs/services/Trust/13/IssuedTokenMixedSymmetricBasic256
客户端异常 我们在客户端中使用此InnerException InnerException获取MessageSecurityException {"ID3242:无法对安全令牌进行身份验证或授权."}
[System.ServiceModel.FaultException]: {"ID3242: The security token could not be authenticated or authorized."}
Data: {System.Collections.ListDictionaryInternal}
HelpLink: null
InnerException: null
Message: "ID3242: The security token could not be authenticated or authorized."
Source: null
StackTrace: null
TargetSite: null
Run Code Online (Sandbox Code Playgroud)
ADFS调试日志
<TraceRecord xmlns="http://schemas.microsoft.com/2009/10/IdentityModel/TraceRecord" Severity="Error">
<Description>Handled exception.</Description>
<AppDomain>Microsoft.IdentityServer.ServiceHost.exe</AppDomain>
<Exception>
<ExceptionType>Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</ExceptionType>
<Message>ID1038: The AudienceRestrictionCondition was not …Run Code Online (Sandbox Code Playgroud) 我希望能够检测用户何时使用被动ac登录我的应用程序,以便我可以将它们添加到我的数据库中,如果这是第一次使用我的应用程序.现在我正在订阅WSFederationAuthenticationModule.SignedIn,但我觉得我错过了什么.主要是我不确定订阅活动的最佳位置,我让它在PostAuthenticateRequest内部工作,但它有点hacky.有什么建议?
此代码来自global.asax
public override void Init()
{
base.Init();
PostAuthenticateRequest += (s, e) =>
{
try
{
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn -= SignedIn;
}
finally
{
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn += SignedIn;
}
};
}
private void SignedIn(object sender, EventArgs e)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
编辑:
现在我将使用一个标志变量来确保我只订阅一次SignedIn.除非有人有任何其他建议:)感谢Sandrino的帮助.这就是我现在所拥有的.
private static bool isFirstRequest = true;
public override void Init()
{
base.Init();
PostAuthenticateRequest += (s, e) => {
if (isFirstRequest)
{
FederatedAuthentication
.WSFederationAuthenticationModule.SignedIn += SignedIn;
isFirstRequest = false;
}
};
}
private void SignedIn(object sender, EventArgs e)
{
//do something …Run Code Online (Sandbox Code Playgroud) 我已经在使用ACS,并且很乐意将Azure Active Directory设置为身份提供者.
我似乎无法找到从WAAD获取ADFS信息的任何方法,但我猜它还处于早期......
有谁知道这是否可能?
乔
我正在使用带有自定义STS的Windows Azure访问控制服务.我可以通过ACS登录我的应用程序,但是我在登出功能方面遇到了麻烦.我在我的应用程序中尝试过这段代码.
WSFederationAuthenticationModule fam = FederatedAuthentication.WSFederationAuthenticationModule;
try
{
FormsAuthentication.SignOut();
}
finally
{
fam.SignOut(true);
}
Page.Response.Redirect("default.aspx");
Run Code Online (Sandbox Code Playgroud)
但似乎它从ACS注销用户而不是从自定义STS注销.从STS注销我该怎么办?应用(RP),ACS或STS中的问题可能出在哪里?
我认为ACS应该要求自定义STS注销用户,但似乎它没有这样做.我错过了什么?
感谢Gaurav Mantri 在C#中回答我之前提出的Azure ACS设置问题.
但是能有人向我解释,如何以下线路保护?
if (!ClaimsPrincipal.Current.Identity.IsAuthenticated)
Run Code Online (Sandbox Code Playgroud)
ACS模式中的客户端很方便中间人,他可能无法登录到Facebook,例如,这被转发到ACS(我假设这部分是安全的),但现在ACS告诉客户回去关于失败的依赖方.
最后一部分是如何获得保障的?什么阻止客户端篡改ACS消息"失败"到"成功"?Asp.Net如何知道如何验证签名并解密消息?
就此而言,它用于加密/签署消息交换的密钥是什么?那在webfarm/Azure环境中如何工作?
我有一个在 Azure (AKS / ACS) 上运行的 Kubernetes 集群。我使用门户创建了集群。使用现已过期的客户端密钥自动创建了 aadClient。
有人可以告诉我如何设置我已经创建的新客户端密码吗?
目前 AKS 无法更新负载均衡器值或挂载持久存储。
谢谢你!
从仅在stackoverflow上发布的问题来看,Azure ACS似乎令许多实施者失望,因为它无法为Windows Live ID用户提供电子邮件地址.这不仅有助于注册新成员,而且还可以对返回成员进行身份验证.如果没有一些明确的流程,成员将身份提供商凭证连接到他们的帐户,那么后者的目的是否仍然可以实现?
ACS确实为Live ID用户提供的"nameidentifier"声明是否可能与已注册成员的正确编码的电子邮件地址相匹配?这是我设想的过程:
有谁知道这样的哈希函数是否可以公开?
干杯
BillVo