Истифодаи REST-итминон барои санҷиши мисолҳои ҷараёни OAuth 2.0

OAuth 2.0 чор ҷараёни гуногунро таъмин мекунад, аммо ҳадафи асосии ҳар як ҷараён иборат аз он аст дастрасии_токенро дастрас кунед ва онро барои дастрасӣ ба захираҳои ҳифзшуда истифода баред.

Чор ҷараёни гуногун инҳоянд:

  • Гранти рамзи иҷозат
  • Ҷараёни грантӣ
  • Эътимодномаи мизоҷ
  • Гардиши гузарвожа

Ин дастур намунаҳои рамзро бо истифода аз REST-барои санҷиши ҷараёнҳои OAuth 2.0, ҷараёни гранти иҷозатнома ва эътимодномаи мизоҷ пешниҳод мекунад.




Ҷараёни гранти иҷозатнома

Ин ҷараёни маъмултаринест, ки дар он рамз дода мешавад ва барои ба даст овардани он истифода мешавад дастрасӣ . Пас аз ворид шудани корбар, ин рамз ба замимаи пешина (дар браузер) пахш карда мешавад. Access_token дар тарафи сервер дода мешавад ва муштариро бо парол ва рамзи гирифтааш тасдиқ мекунад.

Раванди се марҳила:


  • 1 - Гирифтани рамзи тасдиқкунӣ
  • 2 - Нишони дастрасӣ гиред
  • 3 - Истифодаи Нишони Нишони (барои дастрасӣ ба захираҳои ҳифзшуда)

Рамзи тасдиқро гиред

Қадами аввал ин ба даст овардани code:

import io.restassured.RestAssured; import io.restassured.http.ContentType; import io.restassured.response.Response; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import static io.restassured.RestAssured.given; import java.util.Base64; public class RestAssuredOAuth2 {
public static String clientId = 'some_client_id';
public static String redirectUri = 'some_redirect_uri';
public static String scope = 'some_scope';
public static String username = 'some_email';
public static String password = 'some_password';
public static String encode(String str1, String str2) {
return new String(Base64.getEncoder().encode((str1 + ':' + str2).getBytes()));
}
public static Response getCode() {
String authorization = encode(username, password);

return


given()




.header('authorization', 'Basic ' + authorization)




.contentType(ContentType.URLENC)




.formParam('response_type', 'code')




.queryParam('client_id', clientId)




.queryParam('redirect_uri', redirectUri)




.queryParam('scope', scope)




.post('/oauth2/authorize')




.then()




.statusCode(200)




.extract()




.response();
}
public static String parseForOAuth2Code(Response response) {
return response.jsonPath().getString('code');
}
@BeforeAll
public static void setup() {
RestAssured.baseURI = 'https://some-url.com';
}
@Test
public void iShouldGetCode() {
Response response = getCode();
String code = parseForOAuth2Code(response);

Assertions.assertNotNull(code);
} }

Нишони дастрасиро дастрас кунед

Пас аз гирифтани рамзи иҷозат, мо метавонем барои access_token дархост кунем:

public static Response getToken(String authCode) {
String authorization = encode(username, password);
return
given()

.header('authorization', 'Basic ' + authorization)

.contentType(ContentType.URLENC)

.queryParam('code', authCode)

.queryParam('redirect_uri', redirectUri)

.queryParam('grant_type', grantType)

.post('/oauth2/token')

.then()

.statusCode(200)

.extract()

.response();
}
public static String parseForAccessToken(Response loginResponse) {
return loginResponse.jsonPath().getString('access_token');
}
@Test
public void iShouldGetToken() {
Response tokenResponse = getToken(code);
String accessToken = parseForAccessToken(tokenResponse);
Assertions.assertNotNull(accessToken);
}

Истифодаи нишони дастрасӣ

Ниҳоят, вақте ки мо як эътибори access_token дорем, пас мо метавонем ба захираҳои ҳифзшуда дархост пешниҳод кунем:

public static void getUsers() {
given().auth()
.oauth2(accessToken)
.when()
.get('/users')
.then()
.statusCode(200); }

Мо инчунин метавонем нишони дастрасиро ҳамчун Authorization Header фиристем бо Bearer префикс:


Барои намуна:

public static void getUsers() {
given()
.header('Authorization', 'Bearer ' + accessToken)
.when()
.get('/users')
.then()
.statusCode(200); }


Ҷараёни эътиборномаи муштариён

Ҷараёни эътиборномаи муштарӣ ягон UI (браузер) надорад ва асосан барои иҷозати мошин ба мошин истифода мешавад.

Дар REST-итминон, ин чунин хоҳад буд:

import io.restassured.RestAssured; import io.restassured.http.ContentType; import io.restassured.response.Response; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import static io.restassured.RestAssured.given; import static io.restassured.RestAssured.requestSpecification; public class RestAssuredOAuth2 {
public static Response response;
private String userAdminClientId = System.getenv('M2M_USER_ADMIN_CLIENT_ID');
private String userAdminClientSecret = System.getenv('M2M_USER_ADMIN_CLIENT_SECRET');
private String oauth2Payload = '{ ' +

' 'client_id': '' + userAdminClientId + '', ' +

' 'client_secret': '' + userAdminClientSecret + '', ' +

' 'audience': 'https://some-url.com/user', ' +

' 'grant_type': 'client_credentials', ' +

' 'scope': 'user:admin' }';
private static String createUserPayload = '{ ' +

' 'username': 'api-user', ' +

' 'email': 'api-user@putsbox.com', ' +

' 'password': 'Passw0rd123!', ' +

' 'firstName': 'my-first-name', ' +

' 'lastName': 'my-last-name', ' +

' 'roles': ['read'] }';
public void userAdminConfigSetup() {
requestSpecification = given().auth().oauth2(getAccessToken(oauth2Payload))


.header('Accept', ContentType.JSON.getAcceptHeader())


.contentType(ContentType.JSON);
}
public String getAccessToken(String payload) {
return given()


.contentType(ContentType.JSON)


.body(payload)


.post('/token')


.then().extract().response()


.jsonPath().getString('access_token');
}
@BeforeAll
public static void setup() {
RestAssured.baseURI = 'https://some-url.com';
}
@Test
public void createUser() {
userAdminConfigSetup();
response = given(requestSpecification)


.body(createUserPayload)


.post('/user')


.then().extract().response();

Assertions.assertEquals(201, response.statusCode());
} }


Хулоса

Дар ин ҷо, мо мисолҳои рамзиро бо REST-боэътимод оид ба тарзи ба даст овардани access_token пешниҳод кардем бо истифода аз ҷараёнҳои OAuth 2.0. Пас аз он ки мо ба даст access_token пас мо метавонем ба захираҳои ҳифзшуда дархост пешниҳод кунем.


Умедворам, ки шумо гуфтаҳои болоро муфид донистед.