Может ли кто-нибудь сказать мне, что происходит с этим подходом для одиночного пения?Как настроить аутентификацию запроса на отдельном веб-сайте аутентификации asp.net mvc с помощью Thinktecture 2 с дружественной страницей входа пользователя?
У меня есть сайт A с логикой аутентификации внутри. Пользователь может выбрать роль для доступа к порталу, который он хочет отправить. Проблема в том, как правильно настроить эти веб-сайты для правильной перенаправления, потому что когда я перенаправляю, я теряю токен (перенаправление - это GET), у меня никогда не было файла cookie на портале, который я хочу отправить. У меня что-то отсутствует в моей реализации? Может быть, конфигурация на портале, которую я хочу перенаправить? Я не использую аудиторию Uri в webconfig, это связано с проблемой? Я использую службу, которая дает мне токен, если пользователь аутентифицирован. Затем с этим маркером я хочу перенаправить страницу на соответствующий портал.
Сказал, что я покажу вам метода регистрации в AccountController
[HttpPost]
public async Task<ActionResult> Login(string ddlRoles, string ddlUrls, LoginModel user)
{
var service = new AuthenticationServiceAgent(user.Username, user.Password);
var securityService = new SecurityServiceAgent(service.GetToken());
...processing the claims
//AT THIS POINT THE USER IS AUTHENTICATED
FederatedAuthentication.WSFederationAuthenticationModule.SetPrincipalAndWriteSessionToken(token, true);
.... get the url to redirect
Response.Redirect(urlToRedirect, false);
}
Мой класс Proxy выглядит так
public class UserNameTokenServiceProxy : TokenServiceProxy
{
#region Properties
public SecurityCredential Credential { get; set; }
#endregion
#region Methods
public override SecurityToken GetToken(ISecurityCredential credential = null)
{
if (null == credential)
{
throw new ArgumentNullException("credential");
}
var factory = new WSTrustChannelFactory(
new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential),
new EndpointAddress(StsEndPoint)
);
factory.TrustVersion = TrustVersion.WSTrust13;
if (null != factory.Credentials)
{
factory.Credentials.UserName.UserName = credential.UserName;
factory.Credentials.UserName.Password = credential.Password;
}
var rst = new RequestSecurityToken()
{
RequestType = RequestTypes.Issue,
KeyType = KeyTypes.Symmetric,
TokenType = TokenTypes.Saml11TokenProfile11,
***********RelyingPartyUri comes from a config file*********
AppliesTo = new EndpointReference(RelyingPartyUri)
};
try
{
var channel = factory.CreateChannel();
var sToken = channel.Issue(rst);
return sToken;
}
catch (Exception ex)
{
return null;
}
}
#endregion
}
}
И базовый класс что один из них:
public abstract class TokenServiceProxy
{
#region Fields
protected string StsEndPoint;
protected string RelyingPartyUri;
#endregion
#region Constructors
protected TokenServiceProxy()
{
StsEndPoint = ConfigurationManager.AppSettings["stsEndpoint"];
if (null == StsEndPoint)
{
throw new Exception("STSEndPoint cannot be null");
}
RelyingPartyUri = ConfigurationManager.AppSettings["relyingPartyUri"];
if (null == RelyingPartyUri)
{
throw new Exception("RelyingPartyUri cannot be null");
}
//StsEndPoint = <add key="stsEndpoint" value="https://sso.dev.MyCompany.com/idsrv/issue/wstrust/mixed/username"/>;
//RelyingPartyUri = @"value="https://dev.MyCompany.com/MyCompanyPortal"/>";
}
#endregion
#region Abstract Methods
public abstract SecurityToken GetToken(ISecurityCredential credential = null);
#endregion
}
В основном мы не используем конфигурацию по умолчанию для WS с audienceUri и секции federationConfiguration, эквивалент будет:
<system.identityModel.services>
<federationConfiguration>
<cookieHandler mode="Default" requireSsl="false" />
<wsFederation passiveRedirectEnabled="true" issuer="https://sso.dev.MyCompany.com/idsrv/issue/wstrust/mixed/username" realm="https://dev.MyCompany.com/MyCompanyPortal" requireHttps="false" />
</federationConfiguration>
</system.identityModel.services>
Можете ли вы также показать свои настройки web.config, в частности раздел 'microsoft.identityModel'? –
@GarrettVlieger В конце примера добавлено больше деталей – Zinov
@GarrettVlieger в основном мы используем прокси для получения токена, AuthenticationServiceAgent внутренне передает через contructor ISecurityCredential экземпляр UserNameTokenServiceProxy, и все, кто использует эту службу, получают токен – Zinov