別の質問で説明したように、ユーザー名/パスワードを取得し、これらの資格情報に基づいて ADFS2 でユーザー (モバイル アプリ) を認証する Web サービスを構築します。私の Web サービスは、ADFS で RP として構成されています。ADFS は SAML 2.0 トークンを発行します。
Web メソッドのコードは次のとおりです。
public class MobileAuthService : IMobileAuthService
{
private const string adfsBaseAddress = @"https://<my_adfs_hostname>/adfs/services/";
private const string endpointSuffix = @"trust/13/issuedtokenmixedsymmetricbasic256";
public string AuthenticateUser(string username, string password)
{
var binding = new WS2007HttpBinding(SecurityMode.Message);
binding.Security.Message.EstablishSecurityContext = false;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
binding.Security.Mode = SecurityMode.TransportWithMessageCredential;
var trustChannelFactory = new WSTrustChannelFactory(binding, new EndpointAddress(adfsBaseAddress + endpointSuffix))
{
TrustVersion = TrustVersion.WSTrust13
};
trustChannelFactory.Credentials.UserName.UserName = username;
trustChannelFactory.Credentials.UserName.Password = password;
var tokenClient = (WSTrustChannel)trustChannelFactory.CreateChannel();
var rst = new RequestSecurityToken(RequestTypes.Issue, KeyTypes.Symmetric);
var token = tokenClient.Issue(rst);
// do some token-related stuff
return token.Id;
}
}
実行しようとすると (このエンドポイントの web http バインディングで構成されているため、ブラウザーからの GET 呼び出し)、次の例外が発生します。
System.ServiceModel.Security.MessageSecurityException - "An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail."
内部例外あり:
System.ServiceModel.FaultException - "An error occurred when verifying security for the message."
応答の署名または証明書に関連していると思いますが、WIF は初めてなので、これを克服する方法がわかりません。