@ -655,6 +655,52 @@ namespace OpenIddict.Server.Tests
Mock . Get ( manager ) . Verify ( mock = > mock . HasPermissionAsync ( application , permissions [ 0 ] , It . IsAny < CancellationToken > ( ) ) , Times . Once ( ) ) ;
Mock . Get ( manager ) . Verify ( mock = > mock . HasPermissionAsync ( application , permissions [ 0 ] , It . IsAny < CancellationToken > ( ) ) , Times . Once ( ) ) ;
}
}
[Fact]
public async Task ValidateAuthorizationRequest_RequestWithOfflineAccessScopeIsRejectedWhenRefreshTokenPermissionIsNotGranted ( )
{
// Arrange
var application = new OpenIddictApplication ( ) ;
var manager = CreateApplicationManager ( instance = >
{
instance . Setup ( mock = > mock . FindByClientIdAsync ( "Fabrikam" , It . IsAny < CancellationToken > ( ) ) )
. ReturnsAsync ( application ) ;
instance . Setup ( mock = > mock . HasPermissionAsync ( application ,
OpenIddictConstants . Permissions . GrantTypes . AuthorizationCode , It . IsAny < CancellationToken > ( ) ) )
. ReturnsAsync ( true ) ;
instance . Setup ( mock = > mock . HasPermissionAsync ( application ,
OpenIddictConstants . Permissions . GrantTypes . RefreshToken , It . IsAny < CancellationToken > ( ) ) )
. ReturnsAsync ( false ) ;
} ) ;
var server = CreateAuthorizationServer ( builder = >
{
builder . Services . AddSingleton ( manager ) ;
builder . Configure ( options = > options . IgnoreGrantTypePermissions = false ) ;
} ) ;
var client = new OpenIdConnectClient ( server . CreateClient ( ) ) ;
// Act
var response = await client . PostAsync ( AuthorizationEndpoint , new OpenIdConnectRequest
{
ClientId = "Fabrikam" ,
RedirectUri = "http://www.fabrikam.com/path" ,
ResponseType = OpenIdConnectConstants . ResponseTypes . Code ,
Scope = OpenIdConnectConstants . Scopes . OfflineAccess
} ) ;
// Assert
Assert . Equal ( OpenIdConnectConstants . Errors . InvalidRequest , response . Error ) ;
Assert . Equal ( "The client application is not allowed to use the 'offline_access' scope." , response . ErrorDescription ) ;
Mock . Get ( manager ) . Verify ( mock = > mock . HasPermissionAsync ( application ,
OpenIddictConstants . Permissions . GrantTypes . RefreshToken , It . IsAny < CancellationToken > ( ) ) , Times . Once ( ) ) ;
}
[Fact]
[Fact]
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenRedirectUriIsInvalid ( )
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenRedirectUriIsInvalid ( )
{
{