1

Java EE サーバー バックエンドの iOS アプリに接続しているユーザーを認証したいと考えています。ここでは、私の春のセキュリティ構成のバックエンドを見つけることができます:

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/security
             http://www.springframework.org/schema/security/spring-security.xsd
             http://www.springframework.org/schema/util 
             http://www.springframework.org/schema/util/spring-util.xsd">

    <http auto-config="true" use-expressions="true">

        <intercept-url pattern="/home.mediator" access="permitAll" />
        <intercept-url pattern="/loginInvalid.security" access="permitAll" />
        <intercept-url pattern="/logout*" access="permitAll" />

        <intercept-url pattern="/user**" access="hasRole('ROLE_USER')"/>
        <intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')"/>
        <intercept-url pattern="/*" access="isAuthenticated()" />

        <form-login login-page="/home.mediator" 
            default-target-url="/loginValid.security"
            authentication-failure-url="/loginInvalid.security" />

        <logout invalidate-session="true" 
            logout-success-url="/logoutSuccess.security" 
            logout-url="/logout.do"/>

    </http>

    <authentication-manager>
            <authentication-provider user-service-ref="customUserDetailsService">
            </authentication-provider>
    </authentication-manager>

</beans:beans>

これは、バックオフィス Web アプリケーションのブラウザーで完全に機能します。しかし、問題は、次のような認証プロセスのために iOS Objective-C クライアントを使用してバックエンド Java EE サーバーにアクセスする場合です。

    NSString *login = self.loginTextField.text;
    NSString *password = self.passwordTextField.text;

    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost:8080/myJeeServer/j_spring_security_check"]];
    [request setHTTPMethod:@"POST"];
    NSString *post =[[NSString alloc] initWithFormat:@"j_username=%@&j_password=%@",login,password];
    [request setHTTPBody:[post dataUsingEncoding:NSUTF8StringEncoding]];

    NSHTTPURLResponse *urlResponse = nil;
    NSError *err;
    [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&err];
    NSLog(@"Request : %@",request);
    NSLog(@"Response : %d",urlResponse.statusCode);
    NSLog(@"Error : %d",err.code);

HTTP レスポンスのステータス コードが 200 になるたびに、iOS クライアント側で認証が成功したか失敗したかを確認できません。たぶん、この方法は、Spring セキュリティ バックエンドと Objective-C クライアント フロントエンドで認証を実装する間違った方法ですが、ウェブ上で他の方法を見つけられませんでした。誰かがこのセキュリティのユースケースで私を助けてくれますか? Objective-C と Spring セキュリティでユーザーを認証する最良の方法は何ですか?

回答ありがとうございます。

4

1 に答える 1